c++之拷贝构造函数

#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) 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);

转载请注明出处:

,贪婪是最真实的贫穷,满足是最真实的财富

c++之拷贝构造函数

相关文章:

你感兴趣的文章:

标签云: