C++继承中的对象模型与继承中构造和析构顺序

简介: 继承中的对象模型问题:从父类继承过来的成员,哪些属于子类对象中?示例:class Base{public: int m_A;protected: int m_B;private: int m_C; //私有成员只是被隐藏了,但是还是会继承下去



继承中的对象模型

问题:从父类继承过来的成员,哪些属于子类对象中?

示例:

classBase

{

public:

   intm_A;

protected:

   intm_B;

private:

   intm_C; //私有成员只是被隐藏了,但是还是会继承下去

};

//公共继承

classSon :publicBase

{

public:

   intm_D;

};

voidtest01()

{

   cout<<"sizeof Son = "<<sizeof(Son) <<endl;

}

intmain() {

   test01();

   system("pause");

   return0;

}

利用工具查看:Visual Studio 的开发人员命令提示符

打开工具窗口后,定位到当前CPP文件的盘符

然后输入: cl /d1 reportSingleClassLayout查看的类名   所属文件名

效果如下图:

结论: 父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到

继承中构造和析构顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数

问题:父类和子类的构造和析构顺序是谁先谁后?

示例:

classBase

{

public:

   Base()

   {

       cout<<"Base构造函数!"<<endl;

   }

   ~Base()

   {

       cout<<"Base析构函数!"<<endl;

   }

};

classSon : publicBase

{

public:

   Son()

   {

       cout<<"Son构造函数!"<<endl;

   }

   ~Son()

   {

       cout<<"Son析构函数!"<<endl;

   }

};

voidtest01()

{

   //继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反

   Sons;

}

intmain() {

   test01();

   system("pause");

   return0;

}

速记:构造时现有父亲后又儿子,析构顺序相反(白发送黑发)

总结:继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反


目录
相关文章
|
17天前
|
C++
C++(二十)继承
本文介绍了C++中的继承特性,包括公有、保护和私有继承,并解释了虚继承的作用。通过示例展示了派生类如何从基类继承属性和方法,并保持自身的独特性。此外,还详细说明了派生类构造函数的语法格式及构造顺序,提供了具体的代码示例帮助理解。
|
17天前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
17天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
1月前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
|
1月前
|
编译器 C++
virtual类的使用方法问题之静态和非静态函数成员在C++对象模型中存放如何解决
virtual类的使用方法问题之静态和非静态函数成员在C++对象模型中存放如何解决
|
1月前
|
编译器 C++
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
|
1月前
|
JavaScript Java C语言
面向对象编程(C++篇3)——析构
面向对象编程(C++篇3)——析构
25 2
|
1月前
|
编译器 C++
【C++】类和对象(中)
【C++】类和对象(中)
|
1月前
|
存储 编译器 程序员
【C++】类和对象(上)
【C++】类和对象(上)
|
1月前
|
算法 Ubuntu 机器人
DRAKE - 基于模型的机器人设计与验证 由丰田研究所支持的 C++ / Python 工具箱。
DRAKE - 基于模型的机器人设计与验证 由丰田研究所支持的 C++ / Python 工具箱。
43 1