拷贝构造又叫复制构造;若是没有实现拷贝构造函数,c++会自动生成一个,叫作隐式拷贝构造函数.该自动生成的隐式拷贝构造也能应付绝大部分状况.c++
拷贝构造函数的格式:函数
//定义 class CTest { public: CTest(intxx=0,intyy=m)(X=xx;Y=yy;) CTest(const CTest & p); int getX(){return X;} int getY(){return Y;} private: int X; int Y; }; //拷贝构造的实现 CTest::CTest(const CTest& p) { X = p.X; Y = p.Y; std::cout<<"拷贝构造函数调用"<<std::endl; }
拷贝构造函数的调用:code
1)一个对象用于给另一个对象进行初始化(常称为赋值初始化);对象
CTest testA = new CTest(10,20); CTest testB = testA ; 或者 CTest TestC(testA );
2)一个对象做为函数参数,以值传递的方式传入函数体;get
//参数是对象,是值传递,会调用拷贝构造函数 int GetValue(CTest aa) { return aa.getX(); } //错误示范:若是参数是引用类型,自己就是引用传递,因此不会调用拷贝构造函数 int GetValue(CTest & aa) { return aa.getX(); }
3)一个对象做为函数返回值,以值传递的方式从函数返回;class
//返回值是对象类型,会调用拷贝构造函数。会调用拷贝构造函数,由于函数体内生成的对象aa是临时的,离开这个函数就 //消失了。全部会调用拷贝构造函数复制一份。 CTest GetX() { CTest aa(11,20); return aa; } //会调用拷贝构造函数,由于函数体内生成的对象aa是临时的,离开这个函数就消失了。全部会调用拷贝构造函数复制一份。 CTest & GetX() { CTest aa(1); return aa; }