写点什么

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

作者:CtrlX
  • 2022 年 8 月 15 日
    山东
  • 本文字数:654 字

    阅读完需:约 2 分钟

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

继承中的对象模型

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


示例:


class Base{public:  int m_A;protected:  int m_B;private:  int m_C; //私有成员只是被隐藏了,但是还是会继承下去};
//公共继承class Son :public Base{public: int m_D;};
void test01(){ cout << "sizeof Son = " << sizeof(Son) << endl;}
int main() {
test01();
system("pause");
return 0;}
复制代码


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


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


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


效果如下图:



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

继承中构造和析构顺序

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


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


示例:


class Base {public:  Base()  {    cout << "Base构造函数!" << endl;  }  ~Base()  {    cout << "Base析构函数!" << endl;  }};
class Son : public Base{public: Son() { cout << "Son构造函数!" << endl; } ~Son() { cout << "Son析构函数!" << endl; }
};

void test01(){ //继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反 Son s;}
int main() {
test01();
system("pause");
return 0;}
复制代码


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


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

发布于: 刚刚阅读数: 5
用户头像

CtrlX

关注

Pain is inevitable,suffering is optional 2022.08.01 加入

【个人网站】ctrlx.life 【联系方式】微信:gitctrlx 【软件技能】前端,C++,Python,研究网络工程,数据结构与算法。

评论

发布
暂无评论
C++继承中的对象模型与继承中构造和析构顺序_c_CtrlX_InfoQ写作社区