C 繼承設計

2021-09-27 12:53:10 字數 1441 閱讀 2969

1、共有繼承意味著「is-a」關係(是一種)。

2、繼承中父類的作用域相當於巢狀在子類中。

注意上面的宣告,子類中所有名為mf1、mf3、的函式都被父類中mf1、mf3所覆蓋,即使函式有不同的引數型別那個也適用,而且無論是不是虛函式也同樣適用。我們只在意其名稱。

3、解決上面的預設掩蓋行為的方法是使用using宣告式達成目標。如果我們想要基類的一部分同名函式,那麼需要使用到轉交函式,像這樣:base::mf1,它會自動轉換成inline函式。

4、發現共有繼承其實是由兩部分組成:函式介面繼承和函式實現繼承

純虛函式有兩個最主要的特徵:一是他們必須被任何「繼承了他們」的具象class重新宣告,二是他們在抽象類中通常沒有定義。

所以宣告乙個純虛函式的目的是為了讓父類只繼承函式介面。

普通虛函式:父類可以繼承其函式介面,但普通虛函式會提供乙份實現**,父類可能覆寫它。

所以宣告乙個樸素虛函式的目的是讓父類繼承函式介面和預設實現。

普通函式:意味著並不打算在父類中有不同的行為。

宣告普通函式目的是為了父類繼承函式的介面以及乙份強制性實現。

5、「令客戶通過public non-virtual成員函式間接呼叫private virtual函式」稱為nvi手法,把這個非虛函式稱為虛函式的外覆器。

或者藉由function pointers實現strategy模式

或者藉由tr1:function完成strategy模式

上面三種實現對public virtual函式的替代方案。

6、絕不重新定義繼承而來的非虛函式。非虛函式都是靜態繫結的,虛函式都是動態繫結的。當出現繼承時,動態繫結呼叫的函式是真正所指物件的函式。

7、絕對不要重新定義繼承而來的預設引數值,vortual函式是動態繫結的,但是預設值卻是靜態繫結的。

8、某種型別的物件內含某種型別的物件這種關係叫做復合。他有兩個意義:一是has-a 或者is-implemented-in-terms-of(根據某物實現出)。

9、private繼承而來的不是is-a的關係,編譯器不會將父類物件轉換為基類物件,第二私有繼承而來的基類成員,在父類中都會變成private屬性。private繼承意味著只有實現部分被繼承,介面部分應略去。

和復合不同,私有繼承可以造成empty base最優化。這對致力於「物件最小化」的程式庫開發者而言,可能很重要。

10、謹慎使用多重繼承,當使用多重繼承,程式有可能從乙個以上的基類繼承相同名稱(如函式、typedef等等)。

避免鑽石繼承。解決辦法是令最上面的基類設定為virtual base class。為了這樣做,你必須令所有直接繼承自它的classes採用「virtual繼承」

C 繼承與c 繼承

先說c 吧,之前接觸的多一點,c 只允許單繼承,也就是子類只能從乙個父類中繼承 class person 父類 public void eatfood class student person 子類繼承與父類 在main函式中建立乙個student物件,static void main string...

繼承窗體的設計介面報錯 C

先設計了乙個窗體form1,後來一問改動小,又設計了乙個窗體form2,繼承的 為 public partial class form2 form1 但之後設計器之中產生了如下的錯誤 服務容器中已存在服務 system.windows.forms.design.ieventhandlerservic...

C 設計類選擇繼承或組合

在c 程式設計設計類時,用到其他類的屬性或者方法要明白是用組合還是繼承。組合即是has a,該類擁有哪些屬性或者方法 繼承即是is a,該類擁有父類的屬性或者方法。這裡舉乙個例子,假如有乙個父類汽車,當有轎車 卡車 麵包車等類似的實體時,此時應該選擇繼承,即派生類擁有父類汽車的屬性或者方法 當有發動...