第一節課:
分類:靜態多型:函式的過載和運算子過載屬於靜態多型,復用函式名
動態多型:派生類和虛函式實現執行時多型。
靜態多型和動態多型區別:
#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 執行時的多型性是指直到系統執行時,才根據實際情況決定實現何種操作,執行...