复制构造函数(copy Constructor)
·只有一个参数,即对同类对象的引用。
·形如X::X(X&)或X::X(const X &),二者选一后者能以常量对象作为参数
·如果没有定义复制构造函数,那么编译器生成默认复制构造函数。默认的复制
构造函数完成复制功能。
class Complex{
public:
double real, imag;
Complex(double r, double i){
real = r;
imag = i;
}
};
int main(){
Complex c1(1, 2);
Complex c2(c1);//c2就是以c1为参数,调用默认复制构造函数进行
//初始化。初始化的结构是c2成为c1的复制品,即c2和c1每个成员变量的值都相等
cout<<c2.real<<","<<c2.imag;
return 0;
}
class Complex{
private:
double real,imag;
};
Complex c1;//调用缺省无参构造函数
Complex c2(c1);//调用缺省的复制构造函数,将c2初始化成和c1一样
如果编写了复制构造函数,则默认构造函数就不存在了。
class Complex{
public:
double real,imag;
Complex(double r, double i){
real = r;
imag = i;
}
Complex(const Complex &c){
real = c.real;
imag = c.imag;
cout<<"Copy Constructor called"<<endl;
}
};
int main(){
Complex c1(1, 2);
Complex c2(c1);
cout<<c2.real<<","<<c2.imag;
return 0;
}
输出结果:
Copy Constructor called
1,2
构造函数不能以本类的对象作为唯一的参数,以免和复制构造函数想混淆。如:
Complex(Complex c) {...}
感谢北大!!