當指向派生物件的指標被delete時,如果基類的析構函式是虛函式(應該如此),將執行正確的操作:呼叫派生類析構,呼叫基類析構。
class mammal
virtual ~mammal()//需要被繼承的基類,析構函式都應該設定為虛函式,否則有可能無法析構基類
virtual void speak() const };
class dog:public mammal
~dog()
void speak() const
};int _tmain(int argc, _tchar* argv)
}
輸出:
mammal constructor!
dog constructor!
wang wang...
dog destructor!
mammal destructor!
請按任意鍵繼續. . .
繼承(多型和虛析構函式)
派生類不能直接訪問基類的私有成員,必須通過基類方法進行訪問。建立派生類物件時,首先建立基類物件。也就是說基類物件在程式進入派生類建構函式之前被建立。c 使用成員初始化列表來完成。派生類建構函式初始化基類私有成員,採用成員初始化列表。總結 首先,若基類函式需要被派生類重定義,則需要將其在基類宣告為虛函...
繼承和多型二 虛析構函式
雖然我們已經知道了什麼是繼承和多型,也明白了多型依賴於繼承,但是在多型中存在哪些問題呢?多型中可能存在的記憶體洩露問題 例如下面的程式中,在圓形circle的類中定義乙個圓心的座標,並且座標是在堆中申請的記憶體,則在mian函式中通過基類指標操作派生類物件的成員函式是沒有問題的,可是在銷毀物件記憶體...
C 繼承中的多型 虛函式 虛析構函式
從c 繼承中的相容原則中我們知道 父類指標可以直接指向子類物件,父類引用可以直接引用子類物件。當父類和子類有相同方法時呼叫的是父類方法,即是根據指標型別或引用型別來確定呼叫的方法型別的。如果我們想根據指標實際指向的物件型別 引用實際引用的型別 來決定呼叫的方法型別,需要把這個函式宣告為虛函式,這就是...