首页 > C++ > 正文 类使用空间说明 浏览 1245 · 点赞 0 · 1年前 (2023-10-12) 类使用空间说明 xxxxxxxxxx181#include <iostream>2using namespace std;3class X {char m_x1;};4class Y:public virtual X {int m_y;};5class Z:public virtual X {char m_z1;};6class A:public Y ,public Z{char m_y;};7int main()8{9 cout<<"sizeof(X):"<<sizeof(X)<<endl;//4字节,如果没有int m_x则sizeof(X)=1,它是被编译器安插进去的1个char,只要类是空,编译器都会安插1个char,这一字符也会被继承10 cout<<"sizeof(Y):"<<sizeof(Y)<<endl;//继承X的4字节+m_y的4字节+4虚指针指向虚函数表+补全4字节=16字节,为提高运行效率,64位机补全到8的倍数11 cout<<"sizeof(Z):"<<sizeof(Z)<<endl;//继承X的4字节+m_z1的1字节+4虚指针指向虚函数表+补全7字节 = 16字节,为提高运行效率,64位机补全到8的倍数12 cout<<"sizeof(A):"<<sizeof(A)<<endl;//16怎么来的不知道,可不可以这样解释:不会继承两次X了,总共分四部分算13 //(不管是从Y还是从Z继承了X的4字节+补全4=8)+(m_z1的1字节+4虚指针Z指向虚函数表+补全3=8)+14 //(m_z1的1字节+4虚指针Y指向虚函数表+补全3字节=8)+(m_y的1字节+4虚指针Z指向虚函数表+补全3=8)=3215 cout<<"sizeof(int):"<<sizeof(int)<<endl;//16 system("pause");17} C++ 已有0人点赞 打赏一下作者 上一篇 构造函数 下一篇 普通类 猜你喜欢 含指针的类 普通类 构造函数