多型性和虛繼承

2021-08-18 12:41:28 字數 942 閱讀 8200

多型性:字面意思是多種形狀,即「乙個介面,多種方法」。

c++的多型性是由虛函式來實現的,虛函式允許派生類重新定義成員函式,派生類重新定義基類的方法稱為遮蔽。

只有重寫虛函式才算是體現了函式的多型性。

過載沒有體現多型性,因為過載是根據同名函式的不同引數型別選擇使用哪個函式的。

#include

using namespace std;

//基類base

class base;

void base::func();

void derived::func()

若基類base中沒有加virtual,那麼輸出的結果為:

void base::func()

void base::func(int)

如果沒有使用虛函式的話,就沒有使用c++的多型性,那麼呼叫相應的函式的時候,會被限制在基類函式本身,無法呼叫派生類的函式。

虛函式的使用:只要在基類宣告的地方加上virtual就可以了,函式定義的時候不加也可以。有時候為了方便省事,可以只在基類中將函式宣告為虛函式即可。而且在基類中定義虛函式,如果派生類中沒有新函式遮蔽這個函式,那麼依舊會使用基類中的這個函式。

建構函式不可以是虛函式,但是析構函式可以是虛函式,有時候必須是虛函式。

構成多型的條件:

1)必須要存在繼承關係;

2)繼承關係中必須要有同名的虛函式,並且它們得是遮蔽關係

3)存在基類的指標,而且要通過這個指標呼叫虛函式。如: base *p = new derived();

純虛函式:virtual 返回值型別 函式名(函式引數) = 0;

純虛函式沒有函式體,只有函式宣告,而最後的" = 0"只是表示它是純虛函式,沒有其他的用途。

包含純虛函式的類是抽象類,他無法例項化,即無法建立物件。

抽象類一般是作為基類,讓派生類去實現純虛函式,而派生類必須實現純虛函式才能被例項化。

繼承和組合 多型性和虛函式

繼承和組合 重用已存在類的 有兩種方式 1,組合,即在新類中建立已存在類的物件 2,繼承,即建立乙個新類作為乙個已存在類的型別。在派生類中可以重新定義基類中的成員函式,派生類的物件呼叫該函式時呼叫的是重新定義的成員函式,而呼叫基類的成員函式只能使用作用域顯示的標明基類名。建構函式和析構函式的呼叫順序...

多型性和虛函式

11.27 多型指的是同樣的資訊被不同型別的物件接收導致不同的行為,包括 靜態多型性和動態多型性。靜態多型性包括 函式過載和運算子過載 動態多型主要 由虛函式實現。虛函式宣告 virsual 型別說明符 函式名 參數列 純虛函式 virtual 函式型別 函式名 參數列 0 在派生類中定義 抽象類 ...

多型性和虛函式

多型性是物件導向程式設計的乙個重要特徵。c 支援多型性,在 c 程式設計中能夠實現多型性。1 乙個典型的例子 先建立乙個 point 點 類,包含資料成員x,y 座標點 以他為基類,派生出乙個 circle 圓 類,增減資料成員 r 半徑 再以 circle 類為直接基類,派生出乙個 cylinde...