當類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 與類中的構造函數,析構函數以及其他的成員函數無關.