C++学习笔记---拷贝构造函数

来源:互联网 发布:梦幻西游淘宝租号 编辑:程序博客网 时间:2024/06/07 09:36
拷贝构造函数是一种特殊的构造函数
 (1)它是构造函数,所以函数名是类名、没有返回值
 (2)它是特殊的构造函数:参数形式是固定的
 class Object
 {
 public
Object(const Object& other)
{
this->a=other.a;
this->b=other.b;
...
}
};
 拷贝构造函数的含义:以一个对象为蓝本,来构造另一个对象。
 Object b;
 Object a(b);
 称作:以b为蓝本,创建一个新的对象a。(a是b的一个拷贝/备份,两者内容是完全相同)
 拷贝构造函数从不显示调用,而是由编译器隐式地调用,在以下三种情况:
 (1)定义对象
 Object  a;
 Object  b(a);//或者写成Object b = a;
 (2)动态创建对象
 Object  a;
 Object* p = new Object(a);
 (3)函数的传值调用
 void Test(Object obj);
 区分“构造”与“赋值”
 构造: 
 Object a;
 Object b=a;或者Object b(a);此为“构造”,在创建对象的时候给初值,拷贝构造函数被调用
 赋值:
 Object a;
 Object b;
 b=a;此为“赋值”,不会调用拷贝构造函数
 在拷贝构造函数,可以访问参数对象的任意成员,因为他们是同类,所以访问不受限制。
 当没有书写拷贝构造函数时,编译器会默认提供一个拷贝构造函数。默认的拷贝动作:将每一个成员逐个拷贝。
 注意:除非必要,不要添加拷贝构造函数。
 一旦你决定了要添加拷贝构造函数,请仔细检查:
 (1)所有的成员变量,要依次拷贝所有成员变量,不要遗漏
 (2)调用父类的拷贝构造函数
 只有在深度拷贝的情况下,才需要添加拷贝构造函数。