c++多重繼承的記憶體分佈
阿新 • • 發佈:2019-01-09
觀察下面一段程式碼:
class ClassA
{
public:
virtual ~ ClassA(){};
virtual void FunctionA(){};
};
class ClassB
{
public:
virtual void FunctionB(){};
};
class ClassC : public ClassA,public ClassB
{
public:
};
ClassC aObject;
ClassA* pA=&aObject;
ClassB* pB=&aObject;
ClassC* pC=&aObject;
A.pA,pB,pC的取值相同.
B.pC=pA+pB
C.pA和pB不相同
D.pC不等於pA也不等於pB
正確答案: C
答案解析:
注意到題目中class ClassC : public ClassA,public ClassB,即A在前,B在後,所以
這題考察是物件模型中的記憶體佈局。首先明確的是指標都是指向class c,這裡需要知道class c中的記憶體分佈情況;class c中繼承順序為A,B,而且不是虛繼承,故其物件模型記憶體是先是,A的內容(虛擬函式指標),然後B的內容,最後 c物件自己的記憶體 。這樣就知道pa=pc,pc!=pb。