手把手教你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的复制构造函数被调用,生成形
// 参传入函数
