当类a为空时,c继承a,c有虚函数时,c只增加一个指针的大小(4);
当a不为空时,c继承a,c有虚函数时,c首先把a中的成员当成自己的,再增加一个指针大小。
#include<iostream> using namespace std; class a {}; class b{ virtual void fun()=0; }; class c:public a{ /*virtual void fun()=0;*/ virtual void fun(){}; }; class d:public b,public c{}; int main() { cout<<"sizeof(a)"<<sizeof(a)<<endl; cout<<"sizeof(b)"<<sizeof(b)<<endl; cout<<"sizeof(c)"<<sizeof(c)<<endl; cout<<"sizeof(d)"<<sizeof(d)<<endl; return 0;}
#include<iostream> using namespace std; class a { public: char m; int n; }; class b{ virtual void fun()=0; }; class c:public a{ /*virtual void fun()=0;*/ virtual void fun(){}; }; class d:public b,public c{}; int main() { cout<<"sizeof(a)"<<sizeof(a)<<endl; cout<<"sizeof(b)"<<sizeof(b)<<endl; cout<<"sizeof(c)"<<sizeof(c)<<endl; cout<<"sizeof(d)"<<sizeof(d)<<endl; return 0;}
sizeof 类或struct的对象大小,应注意一下几点:
1.为类的非静态成员数据的类型大小之和.
2.由编译器额外加入的成员变量的大小,用来支持语言的某些特性(如:指向虚函数的指针).
3.为了优化存取效率,进行的边缘调整(对齐).
4 与类中的构造函数,析构函数以及其他的成员函数无关.