C語言實現多型

2021-10-14 11:27:18 字數 1526 閱讀 3083

多型性是物件導向程式設計的乙個重要特徵,利用多型性可以設計和實現乙個易於擴充套件的系統。

顧名思義,多型的意思是多種形態,在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...