這是一種作業問題。對於下面的代碼,如何用虛函數確定sizeof類?
#include <iostream>
using namespace std;
class A
{
public:
virtual void f(){}
};
class B
{
public:
virtual void f2(){}
};
class C: public A, public B
{
public:
virtual void f3(){}
};
class D: public C
{
public:
virtual void f4(){}
};
int main()
{
cout<<sizeof(D)<<endl;
}
輸出爲:8
任何人都可以請解釋它是如何爲8個字節?如果vtable的實現依賴於編譯器,那麼面試中這種問題應該怎麼回答?虛擬基類怎麼樣?
編輯:我正在一個32位平臺上工作。
在大多數情況下,`sizeof`運算符對於類類型並不真正有意義。如果你依賴於某個類的大小,那麼你的設計在某處出錯的機率是很好的(但不是100%)。你能詳細說明你在作業中想要完成什麼,或者這是否是實際的作業問題? (如果是後者並且教師沒有指定特定的編譯器或平臺,那麼唯一正確的答案是「類的大小是實現細節」。) – 2011-01-22 05:46:36
@Jonathan:我很久以前在筆試中遇到過這個問題,在多種選擇中沒有像「依賴實施」這樣的選擇。公司名稱是Phil ***。我想,我不能在這裏提到公司名稱:) – bjskishore123 2011-01-22 05:55:52
那麼書面測試不允許正確的答案。這並不是不正確的。 「8字節」,「兩個指針」和「64位」都不是正確的答案,即使它在特定的系統/編譯器組合上是準確的。 – 2011-01-22 06:08:32