C++子类的内存结构和继承方式
2014-06-20 10:03
120 查看
在C++中,如果类有虚函数,则在类对象的内存最开始的地方存放一个虚函数表的指针,接着是成员变量;如果是子类,则是父类的一个拷贝,其中
包括虚函数表指针(如果有虚函数的话)和父类成员变量,之后是子类的成员变量。类继承的方式有三种,public,protected,private;这些就像类成员的保护
机制一样,是由编译器来控制的,内存中并没有这种保护机制。通过下面的例子,组合和继承对于子类的成员变量的存储方式基本是相同,只是子类要求父类拷贝
必须在子类内存的前面。
主要区别是对类的成员的访问机制上,组合只能通过类对象来访问对象的成员变量和成员函数;继承的访问方式
其中,子类中访问权限一栏,是父类被子类继承后,相当于在子类中的权限,即子类有四种访问控制权限:public,protected,private,no access;
通过private继承,父类的public和protected权限变成了private,子类的成员函数仍是可以访问的。但子类的子类是无法访问的。
附上:其中组合和继承的类的大小不同是由于对象变量的存储顺序不同,根据内存的对齐机制所以大小不同。
包括虚函数表指针(如果有虚函数的话)和父类成员变量,之后是子类的成员变量。类继承的方式有三种,public,protected,private;这些就像类成员的保护
机制一样,是由编译器来控制的,内存中并没有这种保护机制。通过下面的例子,组合和继承对于子类的成员变量的存储方式基本是相同,只是子类要求父类拷贝
必须在子类内存的前面。
主要区别是对类的成员的访问机制上,组合只能通过类对象来访问对象的成员变量和成员函数;继承的访问方式
其中,子类中访问权限一栏,是父类被子类继承后,相当于在子类中的权限,即子类有四种访问控制权限:public,protected,private,no access;
通过private继承,父类的public和protected权限变成了private,子类的成员函数仍是可以访问的。但子类的子类是无法访问的。
附上:其中组合和继承的类的大小不同是由于对象变量的存储顺序不同,根据内存的对齐机制所以大小不同。
#include <iostream> using namespace std; class base{ public: base():a(0),b(1),c(2){} int a; protected: int b; private: int c; }; class wangt:public base{ public: wangt():h('a'),j('b'),k('c'),base(){}; char h; protected: char j; private: char k; }; class wa{ public: wa():h('a'),j('b'),k('c'),b(){}; char h; base b; protected: char j; private: char k; }; int main() { wangt* w = new wangt; cout <<"sizeof(wangt): "<< sizeof(wangt) << endl; wa *a = new wa; cout <<"sizeof(wa): "<< sizeof(wa) << endl; return 0; }
相关文章推荐
- 子类虚函数C++ 继承中子类与父类虚函数入栈顺序 及父类私有虚函数的调用方式
- 浅谈C++多态性 & C++虚继承的实现方式与内存布局
- C++异常机制的实现方式和开销分析 (大图,编译器会为每个函数增加EHDL结构,组成一个单向链表,非常著名的“内存访问违例”出错对话框就是该机制的一种体现)
- c++对象多继承的内存结构
- c++面试题之 多继承内存结构
- c++单继承、多继承、菱形继承内存布局(虚函数表结构)
- C++ 继承中子类与父类虚函数入栈顺序 及父类私有虚函数的调用方式
- C++反汇编第五讲,认识多重继承,菱形继承的内存结构,以及反汇编中的表现形式.
- 【C++】c++单继承、多继承、菱形继承内存布局(虚函数表结构)
- C++虚继承的实现方式与内存布局
- 【C++】c++单继承、多继承、菱形继承内存布局(虚函数表结构)
- c++单继承、多继承、菱形继承的内存布局(虚函数表结构)
- [MFC学习之C++基础] 孙鑫视频中第三讲中提到的小测试程序(关于基类和子类的继承关系)
- C/C++:程序的内存分配方式
- c++ 继承方式 合集
- C++继承中子类未定义函数的局限性
- c++对象和内存 对虚继承的讨论
- Hibernate学习笔记:混合使用每个继承结构一张表 和 每个子类一张表
- C++内存分配方式(转)
- 我的C++ (三) - 空类/结构内存占用情况