C 多型公有繼承

2021-07-22 12:21:12 字數 1293 閱讀 4846

標籤(空格分隔): c++

版本:2
本文章僅發布於 作業部落(原) , csdn

如果我們希望同乙個方法在基類和派生類中的行為是不同的的時候,我們可以採取一種比較複雜的行為——多型。具有多型性質的物件的行為取決於呼叫物件,即同乙個方法的行為隨上下文而異。為了實現多型c++提供了兩種重要的機制1

無論我們是否使用多型,都可以在派生類中新增成員

當派生類重寫了基類的方式時,該方法就已經具有了不同的行為,當我們使用派生類物件的引用去呼叫重寫後的方法時,就可以看到與父類不同的行為了。但是我們需要注意的一點時,如果我們要在重寫的方法中使用父類的同名方法,則必須要使用函式限定名指定方法所在。不然像下面這種情況就會導致stackoverflow

void dog::bark()
加入我們需要在某些函式上使用多型性質,則需要在基類和派生類的相應方法上宣告virtual關鍵字。假如我們沒有宣告virtual關鍵字,則方法的行為與引用型別相關,而與具體的物件無關。也就是說在沒有宣告virtual的情況下,基類指標一定會呼叫基類定義的方法,儘管基類指標可能會指向派生類物件。而定義了virtual關鍵字後,函式的呼叫就與指標型別無關,而是與物件相關,就算當前指標是基類型別,也會呼叫物件重寫過的方法。

不新增virtual的示例

class base

class imp : base

...int main()

輸出結果

base

新增virtual的示例

class base;

class imp : base;

...int main()

輸出結果

imp

class

base

;

基類物件宣告虛擬的析構函式是為了保證釋放派生物件時能夠按照正確的順序呼叫析構函式。

當我們使用多型性質的時候,大部分都會使用基類指標指向派生類物件。所以原因跟使用虛方法的原因類似。當我們沒有宣告虛析構函式的時候,delete時只會呼叫位於指標型別的析構函式。如果我們宣告了虛的析構函式,則會呼叫相應物件型別的虛構函式,而後自動呼叫基類的析構函式。因此在基類宣告虛擬析構函式可以保證析構函式的正確呼叫順序。

stephen prata.c++ primer plus.人民郵電出版社.2016.3. 490~501 ↩

C 類繼承2 多型公有繼承

有時候希望同乙個方法在派生類和基類中的行為是不同的。換句話說,方法的行為取決於呼叫該方法的物件。這種較複雜的行為稱為多型 具有多種形態。即同一種方法其行為隨上下文而異。有兩種重要的機制可用於實現多型公有繼承 在派生類中重新定義基類的方法。使用虛方法。如果要在派生類中重新定義基類的方法,通常應將基類方...

C 公有繼承

class base class derived public base派生類宣告時,加上 public 基類名 公有繼承,派生類繼承了成員和介面。也就是說,派生類物件中,有基類的成員。派生類不能直接訪問基類的私有,但是可以訪問基類的公有介面,所以通過基類的公有介面可以間接的訪問基類成員。派生類在宣...

C 類繼承 公有繼承

使用公有繼承,可以達到如下的特性 tabtenn1.h ifndef tabtenn1 h define tabtenn1 h include using std string class tabletennisplayer 基類宣告 void resettable bool v class rat...