【 聲明:著作權,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】
記得還在我們大學C++第一門課的時候,老師就告訴我們說,C++是一門物件導向的語言。C++有三個最重要的特點,即繼承、封裝、多態。等到後來隨著編碼的增多和工作經驗的積累,我也慢慢明白了物件導向的含義。可是,等我工作以後,使用的程式設計語言更多的是C語言,這時候我又想能不能把C語言變成物件導向的語言呢?等到後來通過思考和實踐,我發現其實C語言也是可以物件導向的,也是可以應用設計模式的,關鍵就在於如何?物件導向語言的三個重要屬性。
(1)繼承性
[cpp] view plaincopyprint?
- typedef struct _parent
- {
- int data_parent;
-
- }Parent;
-
- typedef struct _Child
- {
- struct _parent parent;
- int data_child;
-
- }Child;
typedef struct _parent<br />{<br /> int data_parent;</p><p>}Parent;</p><p>typedef struct _Child<br />{<br /> struct _parent parent;<br /> int data_child;</p><p>}Child;<br /> 在設計C語言繼承性的時候,我們需要做的就是把基礎資料放在繼承的結構的首位置即可。這樣,不管是資料的訪問、資料的強轉、資料的訪問都不會有什麼問題。
(2)封裝性
[cpp] view plaincopyprint?
- struct _Data;
-
- typedef void (*process)(struct _Data* pData);
-
- typedef struct _Data
- {
- int value;
- process pProcess;
-
- }Data;
struct _Data;</p><p>typedef void (*process)(struct _Data* pData);</p><p>typedef struct _Data<br />{<br /> int value;<br /> process pProcess;</p><p>}Data; 封裝性的意義在於,函數和資料是綁在一起的,資料和資料是綁在一起的。這樣,我們就可以通過簡單的一個結構指標訪問到所有的資料,遍曆所有的函數。封裝性,這是類擁有的屬性,當然也是資料結構體擁有的屬性。
(3)多態
[cpp] view plaincopyprint?
- typedef struct _Play
- {
- void* pData;
- void (*start_play)(struct _Play* pPlay);
- }Play;
typedef struct _Play<br />{<br /> void* pData;<br /> void (*start_play)(struct _Play* pPlay);<br />}Play;<br /> 多態,就是說用同一的介面代碼處理不同的資料。比如說,這裡的Play結構就是一個通用的資料結構,我們也不清楚pData是什麼資料,start_play是什麼處理函數?但是,我們處理的時候只要調用pPlay->start_play(pPlay)就可以了。剩下來的事情我們不需要管,因為不同的介面會有不同的函數去處理,我們只要學會調用就可以了。