C 的多型性 筆記

2021-10-21 12:01:26 字數 2392 閱讀 6329

第一節課:

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

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

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

#include

using

namespace std;

//多型

//動物類

class

animal};

// 派生類貓類

class

cat:

public animal};

//執行說話的函式

//位址早繫結 在編譯階段就確定函式位址

//如果想執行讓貓說話,那麼這個函式位址就不能提前繫結,需要在執行階段進行繫結(位址晚繫結)

void

dospeak

(animal &animal)

//animal &animal=cat;父類的引用或指標可以直接指向子類物件

void

test01()

intmain()

;

如果想執行「小貓在說話」,那麼就要借助於虛函式virtual

class

animal

};

動態多型滿足條件:

這是父類的虛函式

virtual

void

speak()

這是子類重寫父類的虛函式

void

speak()

重寫不等同於過載

過載是函式名相同,引數不同

重寫是函式返回值型別要相同,函式名要相同,形參列表的所有內容也要相同

動態多型的使用

父類的指標或者引用 執行子類物件

第二節課:(多型的底層原理)

第三節課 多型案例—計算器類

案例描述:分別用普通寫法和多型技術,設計實現兩個運算元進行運算的計算器類

多型優點:

**組織結構清晰

可讀性強

利於前期和後期的擴充套件以及維護

#include

using

namespace std;

//分別利用普通寫法和多型技術實現計算器

//普通寫法

class

calculator

else

if(oper ==

"-")

else

if(oper ==

"*")

//如果想擴充套件新的功能,需求修改原始碼

//在真實開發中,提倡 開閉原則

//開閉原則:對擴充套件進行開發,對修改進行關閉};

int m_num1;

//運算元1

int m_num2;

//運算元2};

void

test01()

//利用多型實現計算器

//實現計算器抽象類

class

abstractcalculator

int m_num1;

int m_num2;};

//加法計算器類

class

addcalculator

:public abstractcalculator};

//減法計算器

class

subcalculator

:public abstractcalculator};

//乘法計算器

class

mulcalculator

:public abstractcalculator};

void

test02()

;int

main()

第四節課(純虛函式和抽象類)

在多型中,通常父類中虛函式的實現是毫無意義的,主要都是呼叫子類重寫的內容

因此可以將虛函式改為純虛函式

純虛函式的語法是:virtual 返回值型別 函式名 (引數列表)=0;

當類中有了純虛函式,這個類也稱作抽象類

抽象類特點:

無法例項化物件

子類必須重寫抽象類中的純虛函式,否則也屬於抽象類

例子:

#include

using

namespace std;

//純虛函式和抽象類

class

base

;void

test01()

intmain()

C 的多型性

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

C 的多型性

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

C 的多型性

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