C++派生类的构造函数和析构函数

        派生类不仅继承了基类的成员,还添加了新的成员进行了功能的扩充。因此在建立派生类的实例对象时,不仅要初始化派生类对象的基类成员,还要对派生类的新增成员进行初始化。但由于基类的构造函数和析构函数不能被继承,因此派生类构造函数必须负责调用基类构造函数,并对其所需要的参数进行设置。同样,对派生类对象的清理工作也需要加入新的析构函数。


》派生类的构造函数

        派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成。构造派生类的对象时,必须对全部数据成员进行初始化。因此,派生类的构造函数必须要以合适的初值作为参数,调用基类的构造函数用以初始化基类的数据成员,并对新增的数据成员进行初始化。

        派生类构造函数的一般格式:

                  <派生类名>::<派生类名>(<总参数表>):<基类名1>(<参数表1>),<基类名2>(<参数表2>),<基类名3>(<参数表3>),......

                  {

                       <派生类构造函数体>

                  }

         派生类的构造函数名与类名相同。在构造函数的参数表中,给出了初始化基类数据以及新增数据成员所需要的全部参数。在参数之后的成员初始化列表中,列出需要使用参数进行初始化的基类名和成员名以及各自的参数表,各项之间使用逗号分隔。

         当派生类有多个基类时,处于同一层次的各个基类的构造函数的调用顺序取决于定义派生类时声明的顺序(自左向右),而与在派生类构造函数的初始化列表中给出的顺序无关。如果派生类的基类也是一个派生类,则每个派生类只需负责它的直接基类的构造,依次上溯。

         注:建立派生类对象时,构造函数的执行顺序:

                (1)调用基类的构造函数对基类的数据成员进行初始化,调用顺序按照各个基类被继承时声明的顺序(自左向右)

                (2)对新增成员进行初始化,执行顺序按照各个成员在类中声明的顺序(自上而下)

                (3)执行派生类的构造函数体

         派生类的构造函数只有在需要的时候才必须定义。派生类构造函数提供了将参数传递给基类构造函数的途径,以保证在基类进行初始化时能够获得必要的数据。因此,如果基类的构造函数定义了一个或多个参数时,派生类必须定义构造函数。

         如果基类中定义了默认构造函数或根本没有定义任何一个构造函数(此时由编译器自动生成默认构造函数)时,在派生类构造函数的定义中可以省略对基类构造函数的调用,即省略“<基类名>(<参数表>)”。

         如果新增成员中包括成员对象,成员对象的处理情况与基类相同。

         当所有基类和成员对象的构造函数都可以省略,并且也可以不在初始化列表中对其他数据成员进行显式初始化时,可以省略派生类构造函数的初始化列表。


》派生类的析构函数

         与构造函数相同,派生类的析构函数在执行过程中也要对基类和新增成员进行操作,但它的执行过程与构造函数严格相反,即:

              #对派生类新增成员进行清理,如果新增成员中包括成员对象,要调用成员对象的析构函数对成员对象进行清理。

              #调用基类析构函数,对基类成员进行清理。

         派生类析构函数的定义与基类无关,与没有继承关系的类中的析构函数的定义完全相同。它只负责对新增成员的清理工作,系统会自己调用基类及成员对象的析构函数进行相应的清理工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值