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;
    }
  • 相关阅读:
    使网页变灰的代码(包括FLASH等所有网页元素).
    技术面试问题回答
    Spring总结
    IE9插件差不多完成了
    通过dymamic简化Pinvoke调用
    shuffle算法的一种简易实现
    用Reactive Extensions快速实现鼠标手势功能
    编写递归调用的Lambda表达式
    Visual Studio 11 开发者预览版可以下载了
    关于获取所有排列方式的算法
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/7196893.html
Copyright © 2011-2022 走看看