爲何C++中只有指針和引用才能實現多態?

代碼:函數

class A
{
public:
    virtual void Debug(){}
};

class B:public A
{
public:
   virtual void Debug(){}
};

void main()
{
    B b;
    A a = b;
    A * point_A = &b;
    
    a.Debug();
    point_A->Debug();
}


分析:佈局

在程序中:a.Debug調用的是A::Debug,而point_A->Debug調用的是B::Debug。指針

——對於程序A a = b而言,b內存佈局在賦值的時候已經從B轉換到A了,多於的數據都被丟棄,所以其就是一個A類型變量,那麼a.Debug這裏的a就是一個A類型的變量。
——對於point_A來講,它是一個指針,其類型雖然是A,但指向的區域的內容倒是一個B類型的內存結構,雖然內存結果的佈局與A兼容,但其虛函數表中的Debug倒是B的實現。

code

相關文章
相關標籤/搜索