学无先后,达者为师

网站首页 编程语言 正文

C++继承关系下的构造与析构

作者:摁回车的大雷 更新时间: 2022-09-26 编程语言

类中成员的访问权限

Y代表可以访问,N代表不可访问

继承方式 本类 派生类 类外
public Y Y Y
protected Y Y N
private Y N N

继承方式对子类访问父类成员的影响

继承方式 子类继承来的成员的访问权限
public 继承来的这些成员在子类中还是原来的权限
protected 原来的权限为public的成员在子类中变为protected,其他两种不变
private 继承来的成员在子类中权限都变为private

例如,类B以私有方式继承了类A,那么从类A继承来的成员在类B中都是私有成员,原来类A中可以在类外访问的公有数据成员a,现在在类B中只能在类中访问,如果再有类C继承B的时候,无论以哪种方式,都不能在类C中访问a了。

派生类构造函数的格式

格式:
派生类名::派生类名(参数总表):基类名1(参数表1),基类名2(参数表2),......,新增成员名1(参数1),新增成员名2(参数2){}

  1. 如果基类中没有定义带参数的构造函数,派生类的构造函数可以不加基类名和参数表;
  2. 如果基类中没有定义默认构造函数或带有缺省值的构造函数而只有带参数的构造函数时,派生类的构造函数中必须显式的给出基类名和参数表,否则编译器将报错

构造函数与析构函数的调用时机

作用域、内存区间、生命周期:

  1. 全局变量在程序开始时调用构造函数、在程序结束时调用析构函数。
  2. 静态变量在所在函数第一次被调用时调用构造函数、在程序结束时调用析构函数,只调用一次。
  3. 局部变量在所在的代码段被执行时调用构造函数,在离开其所在作用域(大括号括起来的区域)时调用析构函数。可以调用任意多次。

继承关系:(派生类在实例化对象时)

  1. 先调用基类的构造函数,再调用子对象类(成员变量)的构造函数,最后调用派生类的构造函数;
  2. 调用顺序与派生类构造函数冒号后面给出的初始化列表的顺序没有任何关系,按照继承的顺序和变量在类里面定义的顺序进行初始化。 先继承,先构造;先定义,先构造。
  3. 析构函数调用顺序仍然与构造函数构造顺序相反。
  4. 每次调用析构函数时总是析构最近被构造的、且没有被析构的对象。也就是:先被构造的对象后被析构,析构顺序恰与构造顺序相反。(栈模型)

原文链接:https://blog.csdn.net/qq_41796226/article/details/126997683

栏目分类
最近更新