复制构造函数是构造函数的一种,也被称为拷贝构造函数,他只有一个参数,参数类型是本类的引用。默认构造函数(即无参构造函数)不一定存在,但是复制构造函数总会存在。因为只要没有自己写的复制构造函数,就会自动生成一个复制构造函数,它只是实现了对应成员之间的一一对应的复制。大多数时候这样一个自动生成的复制构造函数是够用的,但是当涉及到“深拷贝”的需求时还是要自己设计复制构造函数。
构造函数不能以本类的对象作为唯一参数,以免和复制构造函数相混淆。举例子来说就是, CNum(CNum n){}; 这样的构造函数是不允许的。
为什么C++要有这样的机制来保证复制构造函数一定存在呢,因为在很多种情况下都会需要这样的构造函数。
1)当用一个对象去初始化同类的另一个对象时,会调用复制构造函数。
对基本数据类型有这样的用法:
1 int a = 2;2 int b = a;
第二个语句中使用一个int变量初始化了另一个int变量。对象也可以有类似的初始化方法,用一个对象去初始化另一个同类对象。
1 CNum n1 = 1;2 CNum n2 = n1; //调用复制构造函数
注意,第二个语句是一条初始化语句,调用了复制构造函数。如果分开写成CNum n2; n2 = n1;就不会调用复制构造函数而是调用无参构造函数,然后调用对=运算符的重载函数。