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;

}

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

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


目录
相关文章
|
4天前
|
Java C++
C++的学习之路:21、继承(2)
C++的学习之路:21、继承(2)
14 0
|
4天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
19 0
|
28天前
|
C++
8. C++继承
8. C++继承
22 0
|
4天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0
|
29天前
|
安全 Java 编译器
C++:继承
C++:继承
32 0
|
1天前
|
设计模式 编译器 数据安全/隐私保护
C++ 多级继承与多重继承:代码组织与灵活性的平衡
C++的多级和多重继承允许类从多个基类继承,促进代码重用和组织。优点包括代码效率和灵活性,但复杂性、菱形继承问题(导致命名冲突和歧义)以及对基类修改的脆弱性是潜在缺点。建议使用接口继承或组合来避免菱形继承。访问控制规则遵循公有、私有和受保护继承的原则。在使用这些继承形式时,需谨慎权衡优缺点。
11 1
|
3天前
|
存储 搜索推荐 C++
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
|
3天前
|
编译器 C++
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
|
9天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
9天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”