繼承類的大小

在32位操作系統gcc編譯器環境下,下面程序的運行結果爲()
#include <iostream>
using namespace std;
class A {
public:
int b;
char c;
virtual void print() {
cout << "this is father’s fuction! " << endl;
}
};
class B: A {
public:
virtual void print() {
cout << "this is children’s fuction! " << endl;
}
};
int main(int argc, char * argv[]) {
cout << sizeof(A) << "" << sizeof(B) << endl;
return 0;
}

正確答案: A

A.12 12
B.8 8
C.9 9
D.12 16

答案解析:類的大小隻與成員變量(非static數據成員變量)和虛函數指針有關,還要考慮到對齊.
那麼類A的大小等於4個字節 + 4個字節(考慮對齊) + 4個字節(指向虛函數的指針)=12字節;
類B的大小就是等於類A的大小12個字節.
因爲在基類中存在虛函數時,派生類會繼承基類的虛函數,因此派生類中不再增加虛函數的存儲空間(因爲所有的虛函數共享一塊內存區域),而僅僅需要考慮派生類中添加進來的非static數據成員的內存空間大小。所以類B大小爲12B

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章