c 多型的語法

2021-10-24 21:23:58 字數 1287 閱讀 1349

多型分為靜態多型和動態多型

靜態多型:函式過載和運算子過載屬於靜態多型,復用函式名

動態多型: 派生類和虛函式實現執行是多型

靜態多型和動態多型的區別

靜態多型的函式位址早繫結-編譯階段確認函式位址

動態多型的函式位址晚繫結-執行是確定函式位址

首先先建立三個類

class

animal

//父類};

class

cat:

public animal};

class

dog:

public animal

};

動態多型的滿足條件

1、要有繼承關係

2、子類要複寫父類中的虛函式

其中在animal類中的virtual void speak()函式就是父類中的虛函式,要想實現多型,子類需要重寫與父類同名的函式,其他子類可加virtual也可不加,因為在繼承之後,子類也會繼承父類中的虛函式

動態多型的呼叫

動態多型的呼叫條件

父類的指標或引用來指向子類物件

比喻來說,父類是子類的一種公共特性,就像貓和狗它們都是一種動物,都具有動物的共性特徵,所以當函式的形參是父類的引用或指標時,若函式傳入的物件是子類的物件,並且子類重寫了父類的虛函式,且呼叫虛函式時,會根據傳入的物件不同而實現不同的功能

這裡用**展示一下

void

dospeak

(animal& animal)

//animal &animal=cat/dog

void

test01()

來看看執行結果

這裡就是父類的引用來指向子類的物件

我們可以看到,雖然函式dospeak()中的形參是父類的引用animal &animal

但是在test01()函式中,我們傳入了cat和dog兩個物件後都分別實現了各自類中的speak函式,這就是用父類的引用或指標來引用子類的物件,然後來實現子類物件中重寫父類的虛函式功能,也就是動態多型

關於virtual

virtual關鍵字,在菱形繼承中也有出現過,利用虛繼承的方式來實現菱形繼承,實際上就是利用乙個虛指標,通過指標的移動來實現父類、子類中同名函式在不同情況下的不同呼叫,提高利用率

多型 基本語法

多型分類 靜態多型 和 動態多型。靜態多型 函式過載,運算子過載均屬於靜態多型,即復用函式名。動態多型 由派生類重寫基類方法,然後用基類引用 指標 指向派生類物件來確定具體該呼叫哪乙個類的虛函式,呼叫方法時,會進行動態繫結,這就是動態多型。靜態多型和動態多型的區別 include include u...

多型基本語法

includeusing namespace std class animal class cat public animal class dog public animal 執行說話的函式 位址早繫結 在編譯階段確定函式位址 如果想執行讓貓說話,那麼這個函式位址就不能提前繫結,需要在執行階段進行繫...

C 多型的基本語法與原理剖析

多型分為兩類 1.靜態多型 函式過載和運算子過載屬於靜態多型,復用函式名 2.動態多型 派生類和虛函式實現執行時多型 首先讓我們看這段 include using namespace std class animal class cat public animal void dospeak anim...