介面繼承與實現繼承

2021-06-22 08:45:09 字數 1564 閱讀 2307

所謂介面繼承,就是派生類只繼承函式的介面,也就是宣告;而實現繼承,就是派生類同時繼承函式的介面和實現。

我們都很清楚c++中有幾個基本的概念,虛函式、純虛函式、非虛函式。

虛函式:

虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引用指向乙個繼承類物件的時候,你呼叫乙個虛函式,實際呼叫的是繼承類的版本。——msdn

虛函式用來表現基類和派生類的成員函式之間的一種關係

. 虛函式的定義在基類中進行

,在需要定義為虛函式的成員函式的宣告前冠以關鍵字

virtual. 

基類中的某個成員函式被宣告為虛函式後

,此虛函式就可以在乙個或多個派生類中被重新定義

. 在派生類中重新定義時

,其函式原型

,包括返回型別

,函式名

,引數個數

,引數型別及引數的先後順序

,都必須與基類中的原型完全相同

. 虛函式是過載的一種表現形式

,是一種動態的過載方式.

純虛函式:

純虛函式在基類中沒有定義,它們被初始化為0。 

任何用純虛函式派生的類,都要自己提供該函式的具體實現。 

定義純虛函式 

virtual void fun(void) = 0;

非虛函式:

一般成員函式,無virtual關鍵字修飾。

至於為什麼要定義這些函式,我們可以將虛函式、純虛函式和非虛函式的功能與介面繼承與實現繼承聯絡起來:

宣告乙個純虛函式(pure virtual)的目的是為了讓派生類只繼承函式介面,也就是上面說的介面繼承。

純虛函式一般是在不方便具體實現此函式的情況下使用。也就是說基類無法為繼承類規定乙個統一的預設操作,但繼承類又必須含有這個函式介面,並對其分別實現。但是,在c++中,我們是可以為純虛函式提供定義的,只不過這種定義對繼承類來說沒有特定的意義。因為繼承類仍然要根據各自需要實現函式。

通俗說,純虛函式就是要求其繼承類必須含有該函式介面,並對其進行實現。是對繼承類的一種介面實現要求,但並不提供預設操作,各個繼承類必須分別實現自己的操作。

宣告非純虛函式(impure virtual)的目的是讓繼承類繼承該函式的介面和預設實現。

與純虛函式唯一的不同就是其為繼承類提供了預設操作,繼承類可以不實現自己的操作而採用基類提供的預設操作。

宣告非虛函式(

non-virtual

)的目的是為了令繼承類繼承函式介面及乙份強制性實現。

相對於虛函式來說,非虛函式對繼承類要求的更為嚴格,繼承類不僅要繼承函式介面,而且也要繼承函式實現。也就是為繼承類定義了一種行為。

總結:純虛函式:要求繼承類必須含有某個介面,並對介面函式實現。

虛函式:繼承類必須含有某個介面,可以自己實現,也可以不實現,而採用基類定義的預設實現。

非虛函式:繼承類必須含有某個介面,必須使用基類的實現。

介面繼承與實現繼承

所謂介面繼承,就是派生類只繼承函式的介面,也就是宣告 而實現繼承,就是派生類同時繼承函式的介面和實現。我們都很清楚c 中有幾個基本的概念,虛函式 純虛函式 非虛函式。虛函式 虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引用指向乙個繼承類物件的時候,你呼叫乙個虛函式,實際呼叫的是繼承類...

介面繼承與實現繼承

moakap 所謂介面繼承,就是派生類只繼承函式的介面,也就是宣告 而實現繼承,就是派生類同時繼承函式的介面和實現。我們都很清楚c 中有幾個基本的概念,虛函式 純虛函式 非虛函式。虛函式 虛函式是過載的一種表現形式,是一種動態的過載方式。虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引...

介面繼承與實現繼承

介面繼承與實現繼承 moakap 所謂介面繼承,就是派生類只繼承函式的介面,也就是宣告 而實現繼承,就是派生類同時繼承函式的介面和實現。我們都很清楚c 中有幾個基本的概念,虛函式 純虛函式 非虛函式。虛函式 虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引用指向乙個繼承類物件的時候,你...