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 解釋 標識 在理論上來說可以是自由命名的,但每個標頭檔案的這個 標識 都應該是唯...