c++的「繼承」特性可以提高程式的可復用性。正因為「繼承」太有用、太容易用,才要防止亂用「繼承」。我們要給「繼承」立一些使用規則:
一、如果類a 和類b 毫不相關,不可以為了使b 的功能更多些而讓b 繼承a 的功能。
不要覺得「不吃白不吃」,讓乙個好端端的健壯青年無緣無故地吃人參補身體。
二、如果類b 有必要使用a 的功能,則要分兩種情況考慮:
(1)若在邏輯上b 是a 的「一種」(a kind of),則允許b 繼承a 的功能。如男人(man)是人(human)的一種,男孩(boy)是男人的一種。那麼類man 可以從類human 派生,類boy 可以從類man 派生。示例程式如下:
class human
;class man : public human
;class boy : public man
;(2)若在邏輯上a 是b 的「一部分」(a part of),則不允許b 繼承a 的功能,而是要用a和其它東西組合出b。例如眼(eye)、鼻(nose)、口(mouth)、耳(ear)是頭(head)的一部分,所以類head 應該由類eye、nose、mouth、ear 組合而成,不是派生而成。示例程式如下:
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;
};如果允許head 從eye、nose、mouth、ear 派生而成,那麼head 將自動具有look、smell、eat、listen 這些功能:
// 錯誤的設計
class head : public eye, public nose, public mouth, public ear
;上述程式十分簡短並且執行正確,但是這種設計卻是錯誤的。這就開頭所說的很多程式設計師經不起「繼承」的**而犯下設計錯誤。
乙隻公雞使勁地追打乙隻剛下了蛋的母雞,你知道為什麼嗎?
因為母雞下了鴨蛋。
C 中的繼承和組合區別使用
c 的 繼承 特性可以提高程式的可復用性。正因為 繼承 太有用 太容易用,才要防止亂用 繼承 我們要給 繼承 立一些使用規則 一 如果類a 和類b 毫不相關,不可以為了使b 的功能更多些而讓b 繼承a 的功能。不要覺得 不吃白不吃 讓乙個好端端的健壯青年無緣無故地吃人參補身體。二 如果類b 有必要使...
C 繼承和組合的區別
1.什麼是繼承 a繼承b,說明a是b的一種,並且b的所有行為對a都有意義 eg a woman b human a 鴕鳥 b 鳥 不行 因為鳥會飛,但是鴕鳥不會。2.什麼是組合 若在邏輯上a是b的 一部分 a part of 則不允許b從a派生,而是要用a和其它東西組合出b。例如眼 eye 鼻 no...
c 繼承和組合的區別
1 什麼是繼承 a繼承b,說明a是b的一種,並且b的所有行為對a都有意義 eg a woman b human a 鴕鳥 b 鳥 不行 因為鳥會飛,但是鴕鳥不會。2.什麼是組合 若在邏輯上a是b的 一部分 a part of 則不允許b從a派生,而是要用a和其它東西組合出b。例如眼 eye 鼻 no...