14 类
14.9 构造器
- 当类有私有成员时,无法使用聚合初始化
- 构造器是一个特殊的成员函数,它在非聚合类的对象创建后自动调用
- 构造器
不会
创建对象:编译器在调用构造器之前就为对象分配了内存,然后在未初始化的对象上调用构造函数 - 构造器需要初始化对象的成员,因此不能为const
- const对象不能调用非const的成员函数,但是可以调用构造器(构造器是默认会被调用的)
14.14 拷贝构造器
- 拷贝构造函数使用已有对象来初始化一个相同类型的对象,这个新创建的对象是已有对象的副本
- 如果类的定义中没有显式提供一个拷贝构造函数,那么C++会默认创建一个公共的拷贝构造函数
- 访问控制是以类为单位,而不是以对象为单位,否则拷贝构造函数无法访问形参的私有成员以完成拷贝
- 拷贝构造器不应该修改形参,所以拷贝构造器的形参应该为const左值引用
- 当一个对象通过值传递给函数的形参时,会隐式调用拷贝构造函数进行拷贝;当函数按值返回一个对象给调用者时,也会隐式调用拷贝构造函数进行拷贝
这就是为什么拷贝构造器的形参必须是引用传递而不能是值传递
因为如果拷贝构造器的形参是值传递的话,那么每次值传递时都会隐式调用拷贝构造器自身,最后的结果就是无限递归地调用拷贝构造器
- 调用拷贝构造器的主要场景
- 对象作为函数的参数,以值传递的方式传给函数
- 对象作为函数的返回值,以值的方式从函数返回
- 使用一个对象给另一个对象初始化