多型性是物件導向程式設計的乙個重要特徵,利用多型性可以設計和實現乙個易於擴充套件的系統。
顧名思義,多型的意思是多種形態,在c++程式設計中,多型指的是:具有不同功能的函式可以用同乙個函式名,這樣可以用乙個函式名呼叫不同內容的函式。
c++的多型分兩種:靜態多型性和動態多型性。
c++中的函式過載和運算子過載實現的多型性就屬於靜態多型,在程式編譯時系統就能決定呼叫的是哪個函式,因此靜態多型性又稱為編譯時多型性。靜態多型性是通過函式過載實現的(運算子過載實質上也是函式過載)。
2.動態多型實在程式執行過程中才動態確定操作指標指向的物件。它又被稱為執行時多型。動態多型是通過虛函式實現的。
c語言雖然不是物件導向的語言,但是c語言同樣可以實現多型性,在linux 核心中就大量存在利用c語言實現多型性的**。
c語言實現編譯時多型性
c語言可以通過巨集實現編譯時多型,下面是乙個例子:
#define add(a, b) (a) + (b);
intmain()
對於不同的型別的a和b,帶引數的巨集 add 會根據傳入的是 int型別或是string 型別而採取不同的 +的策略。
c語言實現動態多型性
c語言可以用函式指標實現動態多型,下面是例子:
#include
#include
//虛函式表結構
struct base_vtbl
;//基類
struct base
;void
base_dance
(void
*this
)void
base_jump
(void
*this
)/* global vtable for base */
struct base_vtbl base_table =
;//基類的建構函式
struct base *
new_base()
//派生類
struct derived1
;void
derived1_dance
(void
*this
)void
derived1_jump
(void
*this
)/*global vtable for derived1 */
struct base_vtbl derived1_table =
;//派生類的建構函式
struct derived1 *
new_derived1
(int h)
intmain
(void
)
上面**不僅實現了多型的性質,其實也在模擬c++中的類的繼承。主函式中基類指標 bas 一開始指向的是基類物件,因此呼叫 dance 和jump是基類的dance jump 。下面把bas 指向派生類的物件,再呼叫dance 和jump 的時候就不是基類的dance 和jump了,而轉化成了派生類的dance 和jump. C語言實現多型
c 中的多型是指 通過基類物件的指標或者基類物件的引用呼叫虛函式 表現更多派生類的特性,但根據c 多型的實現,我們發現這種方法存在一定的空間和效率的折損。不可否認,多型輕鬆解決了很多任務程中遇到的問題,這與 pure c 的解決方法比起來,更為優雅。在考慮移植性上,c 的光芒要蓋過 c 但 c 的多...
C 語言實現 C 多型
c 中的多型是指 通過基類物件的指標或者基類物件的引用呼叫虛函式 表現更多派生類的特性,但根據 c 多型的實現,我們發現這種方法存在一定的空間和效率的折損。不可否認,多型輕鬆解決了很多任務程中遇到的問題,這與 pure c 的解決方法比起來,更為優雅。在考慮移植性上,c 的光芒要蓋過 c 但 c 的...
C語言實現繼承與多型
在前面部落格已經詳細講過c 中繼承與多型的概念,在這裡則只使用c語言的語法來實現繼承與多型。繼承 即派生類中擁有基類的成員變數和成員函式,所以c語言實現如下 include typedef void func void void funb typedef struct b b typedef str...