C 的多型性

2021-09-11 07:10:12 字數 1338 閱讀 4751

乙個介面,多個方法,程式在執行時才決定呼叫的函式(同一事物在不同場景下的多種形態)

函式過載

泛型程式設計

虛函式介面重用,封裝可以使得**模組化,繼承可以擴充套件已存在的**,以上兩種都是為了**重用,而多型則是為了實現介面重用。

1、靜態多型

函式過載算是靜態多型,靜態多型是編譯器在程式編譯期間完成的,根據引數的型別或個數來動態的選擇函式執行

int add_num(int a, int b)

double add_num(double a, int b)

int main()

2、動態多型

在程式執行時,根據基類的引用指向的物件來確定自己具體應該呼叫哪乙個類的虛函式

函式重寫:在子類中定義了乙個與父類完全相同的虛函式時,則稱子類這個函式的重寫將父類的虛函式覆蓋掉了。

例如下面的例子,程式在執行時,會根據物件所屬的類而呼叫不同的成員函式:

#include using namespace std;

class person

};class child:public person

};void fun(person& p)

int main()

注意:

1、只有類的成員函式才能被定義為虛函式,靜態成員函式除外

2、如果在類內只做虛函式的宣告,而在類外寫具體的定義,則宣告前面要寫virtual關鍵字,定義時則不用寫

3、基類中定義了虛函式,在派生類中也始終保持該特性。子類的虛函式也要寫上virtual關鍵字

4、建構函式不能定義為虛函式,析構函式建議定義為虛函式

5、友元函式不能是虛函式,這是因為友元根本不是成員函式

6、在成員函式的形參後面寫上=0,則該成員函式為純虛函式。包含純虛函式的類叫做抽象類,抽象類是不能例項化出物件的,子類繼承該基類之後需要進行重寫,才能例項化物件。

重寫:

1、兩個函式不在同一作用域內,分別在基類和派生類中

2、函式名、引數、返回值均相同

3、基類函式必須有virtual關鍵字

重定義:

1、不在同一作用域內,分別在基類和派生類中

2、函式名相同

3、只要沒有構成重寫就是重定義

過載:

1、在同一作用域內

2、函式名相同,其他可以不同,如引數型別個數

3、返回值型別可以不同

動態多型的條件:

C 的多型性

c 的多型性 1.多型性的概念 多型性是指用乙個名字定義不同的函式,這函式執行不同但又類似的操作,從而實現 乙個介面,多種方法 多型性的實現與靜態聯編 動態聯編有關。靜態聯編支援的多型性稱為編譯時的多型性,也稱靜態多型性,它是通過函式過載和運算子過載實現的。動態聯編支援的多型性稱為執行時的多型性,也...

C 的多型性

type text css rel stylesheet href 是允許將父物件設定成為和乙個或多個它的子物件相等的技術,比如parent child 多型性使得能夠利用同一類 基類 型別的指標來引用不同類的物件,以及根據所引用物件的不同,以不同的方式執行相同的操作.c 中多型更容易理解的概念為允...

C 的多型性

c 的多型性分為兩種,一是執行時的多型性,二是編譯時的多型性,這裡我就不多介紹了。才是做好的說明,在 中有注釋以及我的理解。不知道自己這樣解釋是否正確。如下 執行時的多型性 include using namespace std 執行時的多型性是指直到系統執行時,才根據實際情況決定實現何種操作,執行...