手把手教你c++复制构造函数
1、鼠标双击或者右击打开桌面上DEVc++软件,让其运行起来。Dev-觊皱筠桡C++是一个电脑Windows窗口运行环境下的一款非常适合于刚开始学习艘早祓胂c++学者使用的入门级C/C++ 集成开发环境(IDE)。这款软件很自由,遵守GPL许可协议分发源代码。它大大集成了MinGW中的GCC编译器、GDB调试器和 AStyle格式整理器等众多自由软件。非常的试用,而且界面分类清楚,具有很强大的功能。
2、点开文件,选择新建源代码,这时候新建的代码文本还是没有命名的,是一个空命名的文件,下面我们可以通过界面左上角的文件选项,选择另存为,可以存在电脑里任何一个盘,小编为了下次可以更好的找到文件,我存在电脑的桌面上。当然你们可以选择任何一个盘,根据各人所需
3、复制构造函数形如 X::X( X& ), 只有一个参数即对同类对象的 引用,如果没有定义,那么编译器生成缺省复 制构造函数class Complex { private :double real, imag;};Complex c1; //调用缺省构造函数Complex c2(c1);//调用缺省的复制构造函数,//将 c2 初始化成和c1一样
4、如果定义的自己的复制构造函数,则缺省的翱务校肢复制构造函数不存在。class Complex {private :double real,imag; public:Complex( Complex & c ) { real = c.real;imag = c.imag;cout << “Copy Constructor called”;}};Complex c1; //调用缺省构造函数Complex c2(c1);//调用自己定义的复制构造函数,//输出 Copy Constructor called
5、注意:不允许有形如 X::X( X )的构造函数 class CSample {CSample( CSample c ) {} //错,不允许这样的构造函数};
6、即使缺省的不带参数的构造函数不存在,缺省的复 制构造函数仍然存在。class C1{public:C1() {}};C1 c1,c2(c1);
7、复制构造函数在以下三种情况被调用:a.当用一个对象去初始化同类的另一个对象时 Complex c2(c1);Complex c2 = c1;b.如果某函数有一个参数是类 A 的对象,那么该函数 被调用时,类A的复制构造函数将被调用void f( A a ) {a.x = 1;};A aObj;f ( aObj) ; // 导致A的复制构造函数被调用,生成形// 参传入函数