如果一个构造函数中的第一个参数是类本身的引用,或者是其他的参数都有默认值,则该构造函数为拷贝构造函数。
那么什么是拷贝构造呢?利用同类对象构造一个新对象。
1,函数名和类必须同名。
2,没有返回值。
3,第一个参数必须类本身的对象的const引用,可以有其他的参数,但是必须有默认值。
4,不能重载。
class A{
public:
A();
A(const A &t);//拷贝函数
private:
};
拷贝函数中,形参几乎都为const,并且必须是引用。其作用就是,使用一个已经创造出来的对象来初始化另一个新对象,当然我们如果不写这个函数,系统也会自动生成一个为什么也不干的拷贝构造函数,并依次把非static的成员一一拷贝到正在创建的对象当中去。
前面说过,必须用引用。因为:为了调用拷贝构造函数,我们必须复制他的实参,而复制实参我们又必须去调用拷贝构造函数,从而陷入了一个死循环。
拷贝构造函数的特征:
1,拷贝构造函数的名字与类名相同
2,它只能有一个参数,如果有其他的,那么必须有默认值。
3,每一个类都有一个拷贝构造函数,如果你没有定义,系统会自动生成一个拷贝构造函数。
以下,写一个拷贝构造函数的例子:
主函数如下
而赋值就是,先初始化,然后被给予值。使用=即可实现。
class A{......};
A a,b;
......(省略中间初始化a的过程)
b=a;
如上
最后总结:
如果类中出现指针,拷贝构造函数,析构函数必须自己写,否则会出现严重的错误,比如连续的释放同一处空间,或者是一个指针同时指向了两个地址。这就是所谓的浅拷贝。
每日金句:
走自己的路,让他人为之侧目
————“轻搂爱莉热吻”