基本概念:
- 只有一个参数,即对同类对象的引用。
- 形如 X::X(X&)或X::X(const X&),二者选一,后者能以常量对象作为参数。
- 如果没有定义复制构造函数,那么编译器生成默认复制构造函数。
起作用的三种情况:
1)当用一个对象去初始化同类的另一个对象时。
Complex c2(c1); Complex c2 = c1;//初始化语句,非赋值语句
2)如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的复制构造函数将被调用。
class A { public: A() { }; A(A &a) { cout<<"Copy constructor called"<<endl; } void func(A a){ } };
A a2;
func(a2);
3)如果函数的返回值是类A的对象时,则函数返回时,A的复制构造函数被调用。
A func() { A b(4); return b; } cout<<func().v<<endl;