C 區分介面繼承和實現繼承

2021-09-06 05:19:30 字數 704 閱讀 2984

利用public繼承基類,可以將繼承的結果分為兩類:函式介面繼承函式實現繼承

宣告乙個純函式的目的是為了讓派生類只繼承函式介面.純虛函式有兩個突出的特性:

它們必須被任何"繼承了它們"的具體類重新宣告,而且它們在抽象類中通常沒有定義.

宣告非純虛函式的目的,是讓派生類繼承該函式的介面和預設實現.

宣告非虛函式的目的,是為了令派生類繼承函式的介面及乙份強制性實現.

對class進行設計時,宣告成員函式,要謹慎選擇,不同型別的宣告意味根本意義不相同的事情.

下面是經驗不足的設計者最常犯的錯誤:

1.將所有函式宣告為非虛函式,相當派生類繼承了函式介面和強制性實現,讓派生類沒有進行特化工作的空間.

尤其是non-virtual析構函式帶來的問題.

但是當設計乙個並不想成為基類的類時,應該將其所有成員函式都宣告為non-virtual.

2.將所有成員函式都宣告為virtual.有時候這樣做是正確的,但是有時候一些函式不該在派生類中被重新定義,

這些函式代表繼承體系中的不變性.因此,如果類體的不變性凌駕於特異性時,需要將函式聲是為non-virtual.

啟發:進行物件導向的繼承時,類體的設計,至關重要.良好的類體及其繼承體系的設計,便於系統的實現,推護和擴充套件.

因而在成員函式宣告時,要注意類體的作用和目的,從而選擇合理的宣告方式.

區分介面繼承和實現繼承

表面上的public繼承概念,其實經過嚴密的嚴查之後,會發現它由兩部分組成 函式介面繼承和函式實現繼承。這兩種繼承的差異,其實就是函式宣告與函式定義之間的差異。作為class的設計者,有時候你會希望derived class只繼承成員函式的介面 也就是宣告 有時候你又希望derived class同...

34區分介面繼承和實現繼承

宣告 pure virtual 函式的目的是為了讓derived class 只繼承函式介面,具體實現須在derived class 中完成 宣告impure virtual 函式的目的是為了讓 derived class 繼承該函式的介面和預設實現,通過呼叫可在此預設實現基礎上新增新的 宣告non...

34區分介面繼承和實現繼承

函式介面繼承與函式實現繼承,在public繼承之下,derived classes總是繼承base class的介面。作為class的設計者 1.有時我們希望derived classes只繼承成員函式的介面 宣告 2.有時我們會希望derived classes同時繼承函式的介面與實現,但是又希望...