C語言實現封裝 繼承 多型

2021-10-07 17:45:40 字數 1690 閱讀 4249

c語言中雖然沒有類,但有struct和指標。我們可以在乙個struct中存入資料和函式指標,以此來模擬類行為。

typedef

struct _parent

parent;

typedef

struct _child

child;

#include

#include

//模擬乙個類a

typedef

struct a

a;//實現虛函式

void

dong1()

void

dong2()

//模擬虛表結構

typedef

struct

vtable;

//模擬乙個類中的虛表

vtable a_vtable =

;//精華在這:★a類可以呼叫dong1 dong2 這兩個函式★

//模擬a類的建構函式

void

inita

(a *p,

int a,

int b)

//第乙個是this指標,在c++中也會預設傳乙個this指標

/////模擬派生類 b

typedef

struct b

b;//模擬派生類的虛函式

void

dong11()

//模擬覆蓋dong1這個函式

void

dong66()

//模擬子類虛表,增加了乙個函式dong66

typedef

struct

vtable2;

//子類的虛表

//注意這裡大括號乙個不能少

//★b類可以呼叫dong11、dong2、dong66 這三個函式★

vtable2 b_vtable =

,&dong66 }

;//b類建構函式

//為什麼要a引數呢?初始化基類

void

initb

(b* p,

int a,

int b)

/////以下內容全是模擬

//測試一下a類

void

test1()

//測試一下b類

void

test2()

//test3用來解惑的。其實我們b類不靠a就能呼叫父類,子類方法,test2實現的多型就是為了模擬c++

void

test3()

intmain()

/***

****

****

****

****

****

****上面看著費勁--

--光看下面就行了

typedef

struct

vtable;

vtable a_vtable =

;//如果不單獨測試a 這句話就是廢話

typedef

struct

vtable2;

vtable2 b_vtable =

,&dong66 }

;所以,至始至終我們利用的就是vtable2指向的函式。可以呼叫v1那是因為vtable2中有vtable,而vtable中有v1

*/

C語言實現繼承與多型

在前面部落格已經詳細講過c 中繼承與多型的概念,在這裡則只使用c語言的語法來實現繼承與多型。繼承 即派生類中擁有基類的成員變數和成員函式,所以c語言實現如下 include typedef void func void void funb typedef struct b b typedef str...

C語言實現繼承和多型

一 面向過程程式設計與物件導向程式設計的區別 眾所周知,c語言是一種典型的面向過程程式語言,而c 確實在它的基礎上改進的一款物件導向程式設計語言,那麼,面向過程與物件導向到底有什麼樣的區別呢?從設計方法角度看 面向過程程式設計方法採用函式 或過程 來描述對資料的操作,但又將函式與其操作的資料分離開來...

用C語言實現C 中類的封裝繼承多型

作用 標頭檔案中使用,防止標頭檔案被多重呼叫 作為測試使用,省去注釋 的麻煩 作為不同角色或者場景的判斷使用。使用 把頭檔案的內容都放在 ifndef和 endif中 ifndef 標識 define 標識 endif 解釋 標識 在理論上來說可以是自由命名的,但每個標頭檔案的這個 標識 都應該是唯...