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)调用父类的拷贝构造函数
只有在深度拷贝的情况下,才需要添加拷贝构造函数。
(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)调用父类的拷贝构造函数
只有在深度拷贝的情况下,才需要添加拷贝构造函数。
阅读全文
0 0
- 拷贝构造函数学习笔记
- C++学习笔记(一).拷贝构造函数
- c++拷贝构造函数的学习笔记
- C++学习笔记_5:拷贝构造函数
- c++学习笔记--拷贝构造函数
- C++之拷贝构造函数学习笔记
- C++学习笔记---拷贝构造函数
- C++学习笔记(构造函数和拷贝构造函数)
- 拷贝构造函数与赋值构造函数(学习笔记)
- 拷贝构造函数与赋值构造函数(学习笔记)
- 【C++】拷贝构造函数
- C++:拷贝构造函数
- c++"拷贝构造函数
- C++: 拷贝构造函数
- 【C++】拷贝构造函数
- c++::拷贝构造函数
- 【C++】:拷贝构造函数
- 【C++】拷贝构造函数
- python3_python2
- springMVC --全局异常处理(两种方式)
- Tomcat启动成功但无法访问 访问时报404
- 初识数据库SQL
- 面试题57. 删除链表中重复的结点
- C++学习笔记---拷贝构造函数
- Apache配置多端口
- Spark读取hdfs一行并打印
- javascript中的异步和同步
- 九种浏览器端缓存
- 7、SHA1加密算法
- 开发总结
- dom提高分辨率转canvas
- 面向对象高级编程(__slots__ @property 多重继承 定制类 使用枚举类 使用元类)