#include <iostream></p>#include <string> using namespace std; class name { public : name();//默认构造函数 name(char *pn); //构造函数 name(const name &obj);//拷贝构造函数 ~ name() ;//析构函数 protected : char *pname ; int size ; public: name& operator=(name &obj);//"="运算符重载 } ; name::name() { cout<<"Constructing"<<endl; pname=NULL; size=0; } name::name(char *pn) { cout <<"Constructing "<< pn << endl; pname = new char[strlen(pn)+1]; if (pname) strcpy(pname,pn); size = strlen(pn); } name::name(const name &obj) { cout <<"copy Constructing "<<obj.pname<<endl; pname = new char[strlen(obj.pname)+1]; if (pname) strcpy(pname,obj.pname); size = strlen(obj.pname); } name& name::operator=(name &obj) { cout <<"Assigning "<<obj.pname<<endl; if (this==&obj)//this指针用于表示当前对象的地址 { return obj; } if(pname) { delete []pname; size=0; } pname = new char[strlen(obj.pname)+1]; if (pname) { strcpy(pname,obj.pname); size=strlen(obj.pname); } return *this; } name :: ~ name() { cout << "Destructing "<< pname << endl; delete []pname; size = 0; } void playmain() { name obj1("zhangsan"); //如果你不写copy构造函数,那么C++编译器会给我们提供一个默认的copy构造函数(浅copy) name obj2 = obj1; name obj3("lisi"); name obj4; //如果你不写=操作函数,那么C++编译器会给我们提供一个=操作函数(浅copy) obj4=obj3; } void main() { playmain(); system("pause"); }
在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):
1) 一个对象作为函数参数,以值传递的方式传入函数体;
2) 一个对象作为函数返回值,以值传递的方式从函数返回;
3) 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);
转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/45457739
时间: 2024-10-08 22:53:01