C 中類的繼承和類的組合的區別

2021-10-11 09:13:03 字數 1079 閱讀 3976

首先先看一組概念:

類的組合:乙個類內嵌入其他類的物件作為資料成員,稱為類的組合。

類的繼承:在已有類的基礎上建立新的類。新類可以從乙個或多個已有類中繼承成員函式或資料成員,而且新類還可以重新定義或新增新的資料和函式。

從以上的概念區別中可以看出,類的繼承範圍更廣,它體現了多個類之間的關係。類與類之間的關係可以分為以下兩種:

1.從屬關係。

如果乙個派生類是基類的某種特殊個體,則稱兩種類擁有從屬關係,例如:學生是人,老師也是人,就可以用人的基類派生出學生、老師等派生類。

2.包含關係。

如果乙個派生類中包含乙個基類,比如商場中有咖啡館,則可以由商場的基類派生出咖啡館類。

以上兩種關係都屬於類的繼承與派生,但很明顯它們的派生方式不同,因此類的繼承具有多種方式。

類的組合則單獨描述了上述的「包含關係」,即乙個物件中包含其他類的物件成員。但值得注意的是,乙個類中可以包括多個同類的物件成員,而使用繼承,每個被類只能被包含乙個物件。

類的繼承在c++中具有三種方式,分別是public、private和protected,繼承後派生類對基類成員的訪問能力如下圖:

通過public方式繼承後,基類中各種資料及函式成員的訪問屬性均不變,因此,基類的原生屬性並沒有被改變,public方式的繼承即對應著上述的「從屬關係」,唯一需要注意的點是基類中private屬性的變數在派生類的實現中不能直接訪問了。

通過private或protected方式繼承後,基類中資料和函式成員的訪問屬性均發生了變化,因此這兩種方式的繼承即對應著上述的「包含關係」,其中protected方式更像組合類中子類被定義為public物件,基類中的資料成員可以被繼續繼承和使用,而private方式則像組合類中子類被定義為private物件。

因此private和protected的繼承方式完全可以由組合類的方式替代,為了讓我們的頭髮少掉一些,不如不用private和protected的繼承方式吧。因此狹義的「類的繼承」只使用public的繼承方式,只表示類之間的從屬關係。

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...

類的繼承與組合

無論是繼承與組合本質上都是把子物件放在新型別中,兩者都是使用建構函式的初始化列表去構造這些子物件。組合中是希望新類的內部具有已存在的類的一些功能的時候使用,而不是希望將已存在類作為它的介面。組合通過嵌入乙個物件以實現新類的功能,而新類使用者看到的將是新定義的類的介面,而不是來自老類的一些介面。比如,...