《 高質量C 程式設計指南 》學習重點十

2021-05-25 06:15:06 字數 3787 閱讀 2538

物件(

object

)是類(

class

)的乙個例項(

instance

)。如果將物件比作房子,那麼類就是房子的設計圖紙。所以物件導向設計的重點是類的設計,而不是對 象的設計。

對於c++程式而言,設計孤立的類是比較容易的,難的是正確設計基類及其派生類。 本章僅僅論述「繼承」(

inheritance

)和「組合」(

composition

)的概念。

注意,當前物件導向技 術的應用熱點是

com和corba

, 這些內容超出了

c++教材的範疇,請閱讀

com和

corba

相關論著。

powered by gisun  

繼承 如果

a是基類,b是

a的派生類,那麼

b將繼承

a 的資料和函式。 例 如:

class a

;class b : public a

;main()

這個簡單的示例程式說明了乙個事實:

c++ 的「繼承」特性可以提 高程式的可復用性。 正因為「繼承」太有用、太容易用,才要防止亂用「繼承」。我們應當給「繼承」立一些使用規則。

【規則

10-1-1如果類a和類

b毫不相關,不可以為了使

b的功能更多些而讓b繼承

a 的功能和屬性。 不 要覺得「白吃白不吃」,讓乙個好端端的健壯青年無緣無故地吃人參補身體。

【規則

10-1-2若在邏輯上b是

a的「一種」(

),則允許b繼承

a 的功能和屬性。 例 如男人(

man) 是人(

human

) 的一種,男孩(

boy)是男人的一種。那麼類

man可以從類

human

派生,類

boy可以從類

man派生。

class human

;class man : public human

;class boy : public man

;注意事項

【規則

10-1-2看起來很簡單,但是實際應用時可能會有意外,繼承的概念在程式世界與現實世界並不完全相同。

例如從生物學角度講,鴕鳥(

ostrich

)是鳥(

bird

)的一種,按理說類

ostrich

應該可以從類

bird

派生。但是鴕鳥不能飛,那麼

ostrich::fly

是什麼東西?

class bird

;class ostrich : public bird

;例如從數學角度講,圓(

circle

)是一種特殊的橢圓(

ellipse

),按理說類

circle

應該可以從類

ellipse

派生。但是橢圓有長軸和短軸,如果圓繼承了橢圓的長軸和短軸,豈非畫蛇添足?

所以更加嚴格的繼承規則應當是:若在邏輯上b

a的 「一種」,並且

a的所有功能和屬性對

b而言都有意義,則允許

b繼承

a的功能和屬性。

組合【規則

10-2-1若在邏輯上a是

b的「一部分」(

a part of

),則不允許b從

a派生,而是要用

a和其它東西組合出b。

例如眼(

eye)、鼻(

nose

)、口(

mouth

)、耳(

ear)是頭(

head

)的一部分,所以類

head

應該由類

eye、

nose

、mouth

、ear

組合而成,不是派生而成。如示例

10-2-1

所示。

class eye ;

class nose ;

class mouth ;

class ear ;

正確的設計,雖然**冗長。

class head

void       smell(void)    

void       eat(void)

void       listen(void)   

private:

eye       m_eye;

nose     m_nose;

mouth  m_mouth;

ear        m_ear;

};

示例10-2-1 headeyenosemouthear組合而成

如果允許headeyenosemouthear派生而成,那麼head將 自動具有lookeatlisten這些功能。示例10-2-2十分簡短並且執行正確,但是這種設計方法卻是不對的。

功能正確並且**簡潔, 但是設計方法不對。

class head : public eye, public nose, public mouth, public ear ;

示例10-2-2  headeyenosemouthear派生而成

《 高質量C 程式設計指南 》學習重點十

物件 object 是類 class 的乙個例項 instance 如果將物件比作房子,那麼類就是房子的設計圖紙。所以物件導向設計的重點是類的設計,而不是物件的設計。對於 c 程式而言,設計孤立的類是比較容易的,難的是正確設計基類及其派生類。本章僅僅論述 繼承 inheritance 和 組合 co...

高質量C 程式設計指南 》學習重點四

7 章 記憶體管理 記憶體分配方式有三種 從靜態儲存區域分配。內 存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例 如全域性變數,static 變數。在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單 元自動被釋放。棧記憶體分配運算內...

《 高質量C 程式設計指南 》學習重點六

有了 malloc free 為什麼還要 malloc與 free 是c c 語言的標準庫函式,new delete 是c 對於非內部資料型別的物件而言,光用 maloc free 無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於 malloc fr...