1. 程式人生 > >c++多重繼承的記憶體分佈

c++多重繼承的記憶體分佈

觀察下面一段程式碼:

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。