zoukankan      html  css  js  c++  java
  • C++类中的特殊成员函数-------复制构造函数

      在C++中存在一个特殊函数,他就是复制构造函数,假如我们有类A,如果有A a;A b=a;   在这种情况下利用A类变量a来给同是A类变量的b来赋值,这个时候类会使用复制构造函数,如果我们不显式声明复制构造函数,那么类将会调用默认的复制构造函数。下面的代码说明了这一情况,如果我们将类StringBad中的复制构造函数StringBad(StringBad &)去掉,那么count最后输出的结果会为复制(count为静态变量用来记录类StringBad的对象个数)。

    main.cpp

    #include <iostream>
    #include"StringBad.h"
    using namespace std;
    
    int main()
    {
        StringBad * src=new StringBad("src");
        StringBad srb("srb");
        StringBad srd=srb;
        delete src;
        return 0;
    }

    StringBad.h

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    class StringBad{
    public:
        static int count;
        char * name;
        StringBad(char * name);
        StringBad(StringBad &);
        ~StringBad();
    };

    StringBad.cpp

    #include"string.h"
    #include<iostream>
    #include<stdio.h>
    #include"StringBad.h"
    using namespace std;
    int StringBad::count=0;
    StringBad::StringBad(char * name){
        this->name=new char(strlen(name)+1);
        strcpy(this->name,name);
        count++;
        cout<<"创建新对象"<<(this->name)<<"后,还有"<<count<<"个对象"<<endl;
    }
    StringBad::~StringBad(){
        count--;
        cout<<"析构"<<(this->name)<<"之后,还有"<<count<<"个对象"<<endl;
    }
    StringBad::StringBad(StringBad & s)
    {
        count++;
        this->name=new char(strlen(s.name)+1);
        strcpy(this->name,s.name);
        cout<<"调用复制函数后,还有"<<count<<"个对象"<<endl;
    }
  • 相关阅读:
    LoadRunner12 Java Vuser API语法举例
    Java代码封装redis工具类
    Java代码redis基础操作
    Git提交代码失败: empty ident name (for <>) not allowed
    Ubuntu 16.04 root环境变量不生效问题解决方案
    Jenkins中使用GitLab的配置
    gitlab搭建与配置说明
    移动端网页开发经验总结 (不断更新ing)
    移动端开发注意事项(转载)
    电脑上调试手机网站的几种方法
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/7196893.html
Copyright © 2011-2022 走看看