learncpp-14 类

14 类

14.9 构造器

  • 当类有私有成员时,无法使用聚合初始化
  • 构造器是一个特殊的成员函数,它在非聚合类的对象创建后自动调用
  • 构造器不会创建对象:编译器在调用构造器之前就为对象分配了内存,然后在未初始化的对象上调用构造函数
  • 构造器需要初始化对象的成员,因此不能为const
  • const对象不能调用非const的成员函数,但是可以调用构造器(构造器是默认会被调用的)

14.14 拷贝构造器

  • 拷贝构造函数使用已有对象来初始化一个相同类型的对象,这个新创建的对象是已有对象的副本
  • 如果类的定义中没有显式提供一个拷贝构造函数,那么C++会默认创建一个公共的拷贝构造函数
  • 访问控制是以类为单位,而不是以对象为单位,否则拷贝构造函数无法访问形参的私有成员以完成拷贝
  • 拷贝构造器不应该修改形参,所以拷贝构造器的形参应该为const左值引用
  • 当一个对象通过值传递给函数的形参时,会隐式调用拷贝构造函数进行拷贝;当函数按值返回一个对象给调用者时,也会隐式调用拷贝构造函数进行拷贝

这就是为什么拷贝构造器的形参必须是引用传递而不能是值传递
因为如果拷贝构造器的形参是值传递的话,那么每次值传递时都会隐式调用拷贝构造器自身,最后的结果就是无限递归地调用拷贝构造器

  • 调用拷贝构造器的主要场景
    • 对象作为函数的参数,以值传递的方式传给函数
    • 对象作为函数的返回值,以值的方式从函数返回
    • 使用一个对象给另一个对象初始化
posted @ 2024-07-22 22:22  dengkang1122  阅读(0)  评论(0编辑  收藏  举报