我是C++編程的新手,對於包含虛擬成員函數的類的大小有疑問。請通過我的以下代碼:包含虛擬成員函數的類的大小
#include "stdafx.h"
#include <iostream>
using namespace std;
class BaseClass
{
private:
int a, b;
public:
BaseClass()
{
a = 10;
b = 20;
}
virtual int area()
{
return 0;
}
};
class DerivedClass1 : public BaseClass
{
int x;
public:
virtual void simple()
{
cout << "inside simple" << endl;
}
};
int main()
{
DerivedClass1 Obj;
cout << sizeof(Obj) << endl; // Displays 16 bytes
return 0;
}
上面的代碼顯示大小爲16個字節。根據我的說法,它應該顯示20個字節,因爲兩個虛擬指針(一個從基類繼承,一個由於它自己的虛函數而被添加到派生類本身)+ Derived Class中的三個數據成員等於20個字節。所以請給我解釋一下它是怎麼回事......
繼承虛擬指針_and_添加另一個?爲什麼會發生? – jogojapan 2013-02-21 05:38:02
閱讀[虛擬表](http://en.wikipedia.org/wiki/Virtual_method_table) – borisbn 2013-02-21 05:38:04
如果您有多個繼承,則只有其他vptrs纔會出現。另外,您的實驗結果非常依賴於編譯器和平臺;當[使用g ++編譯](http://liveworkspace.org/code/10xj5R$10)時,它會輸出24,與構建64位可執行文件時的VS2012一樣。 – Praetorian 2013-02-21 05:52:00