C++面向對象編程筆記(三) GeekBand

繼承

通過繼承,可以利用已有的類來定義新的類。所定義的新的類不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。

?例1

class Base{? }

class Derived : public Base {??? }

冒號指出Derived類的基類是Base類。例中表明Base類是公有基類,這被稱為公有派生。使用公有派生,基類的公有成員將成為派生類的公有成員,基類的私有部分也將成為派生類的一部分,但只能通過基類的公有和保護方法訪問。

繼承關系下的構造與析構

創(chuàng)建派生類對象時,程序首先調用基類構造函數(shù),再調用派生類構造函數(shù)。基類構造函數(shù)負責初始化繼承的數(shù)據(jù)成員;派生類構造函數(shù)主要用于初始化新增的數(shù)據(jù)成員。派生類的構造函數(shù)總是調用一個基類構造函數(shù),可以使用初始化器列表語法指明要使用的基類構造函數(shù),否則將使用默認的基類構造函數(shù)。

派生類對象過期時,程序將首先調用派生類析構函數(shù),再調用基類析構函數(shù)。

需要注意一點,基類應包含一個虛析構函數(shù),即使有時并不需要析構函數(shù)。如果析構函數(shù)不是虛的,則將只調用對應于指針類型的析構函數(shù)。例如

...

Base * p = new Derived(...);

delete p;

...

這意味著只有Base的析構函數(shù)被調用,即使指針指向的是一個Derived對象。如果析構函數(shù)是虛的,將調用相應對象類型的析構函數(shù)。因此基類使用虛析構函數(shù)可以確保正確的析構函數(shù)序列被調用。

虛函數(shù)(virtual functions)

有時我們希望同一個方法在基類和派生類中的行為是不同的的,這時我們可以將基類方法聲明為虛的,然后在派生類中重新定義基類的方法。這樣,程序將根據(jù)對象類型而不是引用或指針的類型來選擇方法版本。


non-virtual函數(shù):你不希望子類重新定義它。

virtual函數(shù):你希望子類重新定義它,且它已有默認定義。

pure virtual函數(shù):你希望子類一定要重新定義它,你對它沒有默認定義。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容