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;

}

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

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


目录
相关文章
|
6天前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)
|
5天前
|
编译器 C++
virtual类的使用方法问题之静态和非静态函数成员在C++对象模型中存放如何解决
virtual类的使用方法问题之静态和非静态函数成员在C++对象模型中存放如何解决
|
5天前
|
编译器 C++
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
|
6天前
|
JavaScript Java C语言
面向对象编程(C++篇3)——析构
面向对象编程(C++篇3)——析构
13 2
|
12天前
|
C++
C++ --> 类和对象(三)
C++ --> 类和对象(三)
26 9
|
6天前
|
编译器 C++
【C++】类和对象(中)
【C++】类和对象(中)
|
6天前
|
存储 编译器 程序员
【C++】类和对象(上)
【C++】类和对象(上)
|
6天前
|
算法 Ubuntu 机器人
DRAKE - 基于模型的机器人设计与验证 由丰田研究所支持的 C++ / Python 工具箱。
DRAKE - 基于模型的机器人设计与验证 由丰田研究所支持的 C++ / Python 工具箱。
17 1
|
7天前
|
存储 编译器 C++
【C++】类和对象(下)
【C++】类和对象(下)
|
7天前
|
存储 编译器 Linux
【C++】类和对象(上)
【C++】类和对象(上)