1. 程式人生 > >C語言和設計模式(繼承 封裝 多型)

C語言和設計模式(繼承 封裝 多型)

                【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】

    記得還在我們大學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)就可以了。剩下來的事情我們不需要管,因為不同的介面會有不同的函式去處理,我們只要學會呼叫就可以了。