第十三章 类继承1

成员初始化列表

成员初始化列表的概念,用它为什么快一些

概念:成员初始化列表是一种在类的构造函数中初始化成员变量的方法。它使用初始化列表来为成员变量赋初值,而不是在构造函数的函数体中进行赋值操作。

成员初始化列表快的原因:

避免了默认构造函数的调用:如果在构造函数的函数体中对成员变量进行赋值,那么在对象创建时会先调用默认构造函数来初始化成员变量,然后再进行赋值操作。而使用成员初始化列表,可以直接在对象创建时为成员变量赋初值,避免了默认构造函数的调用,从而提高了效率。

直接初始化:成员初始化列表允许我们使用直接初始化语法来初始化成员变量。直接初始化可以避免隐式类型转换和多次构造函数调用,从而减少了不必要的开销。

const 和引用类型的成员变量:对于 const 和引用类型的成员变量,它们必须在对象创建时进行初始化,并且只能通过成员初始化列表来进行初始化。

初始化顺序:成员初始化列表可以指定成员变量的初始化顺序。在构造函数的函数体中进行赋值操作时,成员变量的初始化顺序是由它们在类中的声明顺序决定的。而使用成员初始化列表,我们可以显式地指定成员变量的初始化顺序,使代码更加清晰和可读。

什么情况下必须使用成员初始化列表

1, const 成员变量:const 成员变量必须在对象创建时进行初始化,并且只能通过成员初始化列表来进行初始化。因为 const 成员变量一旦被初始化,就不能再修改其值。
2, 引用类型的成员变量:引用类型的成员变量也必须在对象创建时进行初始化,并且只能通过成员初始化列表来进行初始化。因为引用类型的成员变量必须引用一个已经存在的对象,而不能是一个空引用。
3, 类型没有默认构造函数:如果成员变量的类型没有默认构造函数,那么在构造函数的函数体中无法直接对其进行赋值操作。这时,必须使用成员初始化列表来调用合适的构造函数来初始化这些成员变量。
4, 基类的构造函数:如果派生类继承了一个基类,并且基类有带参数的构造函数,那么在派生类的构造函数中必须使用成员初始化列表来调用基类的构造函数,并传递相应的参数。
总之,当需要初始化 const 成员变量、引用类型的成员变量、没有默认构造函数的成员变量或基类的构造函数时,必须使用成员初始化列表来进行初始化。这样可以确保这些成员变量在对象创建时得到正确的初值,并且避免编译错误。

派生类构造与析构的调用顺序

构造函数的调用顺序

派生类的构造函数的调用顺序是:先调用基类的构造函数,然后按照成员对象的声明顺序调用成员对象的构造函数,最后执行派生类自身的构造函数体内的代码。

析构函数的调用顺序

派生类的析构函数的调用顺序是:先执行派生类自身的析构函数体内的代码,然后按照成员对象的声明顺序调用成员对象的析构函数,最后调用基类的析构函数。

继承的概念

类的继承是面向对象编程中的一种重要概念,它允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和行为。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值