繼承是基於已有結構派生新的結構,從而重用和組織**的一種能力。你可以非常簡單的在 c 裡實現單繼承,只要字面上把基礎結構作為派生結構的第乙個成員即可。例如,圖 1.10 ( a )顯示了通過把qevent例項作為 scoreevt 的第乙個成員嵌入,從而從基礎結構 qevent派生出結構 scoreevt 。為了使這個用法更加突出,我總是把基本結構成員命名為 super。
如圖 1.10(b) 所示,這種結構的巢狀總是把資料成員 super放在派生結構的每乙個例項的開始處,這是被c 標準保證的。具體來說,「…指向乙個結構物件的指標,在適當的轉換後,指向它的最初的成員。在乙個結構物件中可能有未命名的填充部分,但不是放在開始處」. 這種記憶體配置,使你可以把乙個指向派生的 scoreevt 結構的指標當作乙個指向 qevent基本結構的指標一樣處理。這些都是合法的,可移植的,而且是 c 標準所保證的。因此,你總是可以安全的傳遞乙個指向 scoreevt 的指標,給任何需要乙個指向 qevent的指標的函式。(嚴格來講,在 c 裡你應該顯式的轉換這個指標。在 oop裡,這種轉換被稱為向上型別轉換 (upcasting) ,而且它總是安全的。)結果,所有為 qevent結構設計的函式自動的適用於 scoreevt 結構和其他從 qevent派生的結構。圖 1.10(c) 的 uml 類圖,說明了 scoreevt 結構和 qevent結構的繼承關係。
typedef int(*funptr)(int, int);//定義乙個函式指標來實現對成員函式的繼承
typedef struct sfathertag//父類
sfather_t;
typedef struct schildtag//子類
schild_t;
schild_t schild; //定義乙個子類指標指向子類的物件
int func1(sfather_t* me, int flag);
int main(void)
}int addaandb(int a,int b)
int minusaandb(int a,int b)
int func1(sfather_t* me, int flag) //形參定義乙個父類指標指向父類的物件
return ipara;
}
單一繼承與多重繼承
類的繼承就是建立乙個具有別的類的屬性和行為的新類。即從已有的物件型別出發,建立一種新的物件型別,使它繼承 具有 原物件的特點和功能。新類繼承了原始類的特性,新類稱為原始類的派生類 子類 而原始類稱為新類的基類 父類 派生類可以從它的基類繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的...
C語言的設計模式 單一職責
單一職責原則 通常的定義是只專注於做一件事和僅有乙個引起它變化的原因。對於介面 實現 函式級別往往我們比較容易關注單一職責,大家談的也比較多,但對於返回值 引數可能不會有太多的人關注。但往往就是這些不符合單一職責原則的設計可能導致一些很難發現的bug。看看下面這段 pbuf byte realloc...
c 裡類的繼承
include stdafx.h include include using namespace std 繼承 復用 父類的指標可以指向孩子的物件 繼承過來的普通函式,如果建立物件的時候指標型別是什麼型別,那麼就執行什麼型別的函式 class ca public ca ca virtual void...