C 介面繼承與實現繼承

2021-04-14 01:35:30 字數 1843 閱讀 5147

介面繼承與實現繼承

moakap

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

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

虛函式:

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

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

. +`%k i;l"z @2j-^5/0

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

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

virtual.

航大部落格

-中國民航大學個人門戶

n-d&{'d t0/

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

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

. 航大部落格

-中國民航大學個人門戶

;p,q4b%q2g

在派生類中重新定義時

,其函式原型

,包括返回型別

,函式名

,引數個數

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

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

. alz&p­z y7m0

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

,是一種動態的過載方式

.純虛函式:

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

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

定義純虛函式

virtual void fun(void) = 0;

非虛函式:

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

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

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

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

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

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

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

宣告非虛函式(non-virtual)的目的是為了令繼承類繼承函式介面及乙份強制性實現。

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

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

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

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

c 介面繼承與實現繼承

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

C 介面繼承與實現繼承

介面繼承 派生類只繼承函式的介面 實現繼承 派生類同時繼承函式的介面和實現 虛函式是過載的一種表現方式,是一種動態的過載方式。非虛函式 繼承該函式的介面和乙份強制性實現。虛函式 會繼承該函式的介面和預設實現。純虛函式 純虛函式在基類中沒有定義,介面繼承。含有純虛函式的類無法例項化。總結來說 純虛函式...

C 之實現繼承與介面繼承

之前讀設計模式的時候突然看到這樣的兩個詞語,心裡咯噔了一下,沒有能夠一下反應出這個是什麼意思,於是去google了一下。瞬間覺得自己弱爆了,連這個都不知道。在c 中,有純虛函式和簡單虛函式這一說。純虛函式一般定義沒有直接的定義,定義需要在子類中具體給出。而對於簡單虛函式來說,如果你不想去重新定義的時...