C語言簡單模擬實現繼承、封裝、多態思路

記得還在我們大學C++第一門課的時候,老師就告訴我們說,C++是一門面向對象的語言。C++有三個最重要的特點,即繼承、封裝、多態。等到後來隨著編碼的增多和工作經驗的積累,我也慢慢明白了面向對象的含義。可是,等我工作以後,使用的編程語言更多的是C語言,這時候我又想能不能把C語言變成面向對象的語言呢?等到後來通過思考和實踐,我發現其實C語言也是可以面向對象的,也是可以應用設計模式的,關鍵就在於如何實現面嚮對象語言的三個重要屬性。

(1)繼承性


typedef struct _parent
{
int data_parent;

}Parent;

typedef struct _Child
{
struct _parent parent;
int data_child;

}Child;

在設計C語言繼承性的時候,我們需要做的就是把基礎數據放在繼承的結構的首位置即可。這樣,不管是數據的訪問、數據的強轉、數據的訪問都不會有什麼問題。

(2)封裝性


struct _Data;

typedef void (*process)(struct _Data* pData);

typedef struct _Data
{
int value;
process pProcess;

}Data;

封裝性的意義在於,函數和數據是綁在一起的,數據和數據是綁在一起的。這樣,我們就可以通過簡單的一個結構指針訪問到所有的數據,遍歷所有的函數。封裝性,這是類擁有的屬性,當然也是數據結構體擁有的屬性。

(3)多態


typedef struct _Play
{
void* pData;
void (*start_play)(struct _Play* pPlay);
}Play;

多態,就是說用同一的接口代碼處理不同的數據。比如說,這裡的Play結構就是一個通用的數據結構,我們也不清楚pData是什麼數據,start_play是什麼處理函數?但是,我們處理的時候只要調用pPlay->start_play(pPlay)就可以了。剩下來的事情我們不需要管,因為不同的接口會有不同的函數去處理,我們只要學會調用就可以了。


分享到:


相關文章: