C 虛函式多型

2021-07-08 19:49:24 字數 1025 閱讀 3795

由虛函式實現的動態多型性就是: 同一類族中不同類的物件,對同一函式呼叫作出不同的響應。虛函式的使用方法是:

(1)在基類用virtual宣告成員函式為虛函式。這樣就可以在派生類中重新定義此函式,為它賦予新的功能,並能方便地被呼叫。

在類外定義虛函式時,不必再加virtual。

(2)在派生類中重新定義此函式,要求函式名、函式型別、函式引數個數和型別全部與基類的虛函式相同,並根據派生類的需要重新定義函式體。

c++規定,當乙個成員函式被宣告為虛函式後,其派生類中的同名函式都自動成為虛函式。因此在派生類重新宣告該虛函式時,可以加virtual,也可以不加,但習慣上一般在每一層宣告該函式時都加virtual,使程式更加清晰。

如果在派生類中沒有對基類的虛函式重新定義,則派生類簡單地繼承其直接基類的虛函式。

(3) 定義乙個指向基類物件的指標變數,並使它指向同一類族中需要呼叫該函式的物件。

(4) 通過該指標變數呼叫此虛函式,此時呼叫的就是指標變數指向的物件的同名函式。

通過虛函式與指向基類物件的指標變數的配合使用,就能方便地呼叫同一類族中不同類的同名函式,只要先用基類指標指向即可。如果指標不斷地指向同一類族中不同類的物件,就能不斷地呼叫這些物件中的同名函式。這就如同前面說的,不斷地告訴計程車司機要去的目的地,然後司機把你送到你要去的地方。

需要說明;有時在基類中定義的非虛函式會在派生類中被重新定義,如果用基類指標呼叫該成員函式,則系統會呼叫物件中基類部分的成員函式;如果用派生類指標呼叫該成員函式,則系統會呼叫派生類物件中的成員函式,這並不是多型性行為(使用的是不同型別的指標),沒有用到虛函式的功能

練習:

已知如下部分**,請根據輸出結果完成類c的設計,可以任意新增**

要求不能更改已有的**,包括不能在main函式中新增**

#include

using namespace std;

class a

方法:class d: public a

};class e: public b

};class c:public d, public e

;

C 多型,虛函式

在c 中可以用基類指標指向其派生類,如果乙個派生類繼承多個父類,那麼如何通過基類指標訪問同名的成員呢?如果基類a,基類b中都有函式fun 派生類在同時繼承a b後在記憶體中根據繼承的順序分配記憶體,例如在繼承列表中出現的是b,a,那麼b中的成員在a的之前,當我們用b的指標去訪問時候,編譯器便將指標指...

C 多型,虛函式

多型是指使用相同的函式名來訪問函式不同的實現方法,即 一種介面,多種方法 用相同的形式訪問一組通用的運算,每個運算可能對應的行為不同。c 支援編譯時多型和執行時多型,運算子過載和函式過載就是編譯時多型,而派生類和虛函式實現執行時多型。執行時多型的基礎是基類指標,基類指標可以指向任何派生類物件。2.虛...

C 多型,虛函式

是對於不同物件接收相同訊息時產生不同的動作,體現在編譯和執行兩個方面。編譯時多型體現在函式和運算子的過載上 執行時多型通過繼承和虛函式體現 在基類中冠以關鍵字virtual的成員函式,使得允許在派生類中對基類的虛函式重新定義 對虛函式的呼叫有動態聯編和靜態聯編。建構函式不能是虛擬的,但析構函式可以是...