介面繼承與實現繼承
moakap
所謂介面繼承,就是派生類只繼承函式的介面,也就是宣告;而實現繼承,就是派生類同時繼承函式的介面和實現。
我們都很清楚c++中有幾個基本的概念,虛函式、純虛函式、非虛函式。
虛函式:
虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引用指向乙個繼承類物件的時候,你呼叫乙個虛函式,實際呼叫的是繼承類的版本。——msdn
虛函式用來表現基類和派生類的成員函式之間的一種關係
. +`%k i;l"z @2j-^5/0
虛函式的定義在基類中進行
,在需要定義為虛函式的成員函式的宣告前冠以關鍵字
virtual.
航大部落格
-中國民航大學個人門戶
n-d&{'d t0/
基類中的某個成員函式被宣告為虛函式後
,此虛函式就可以在乙個或多個派生類中被重新定義
. 航大部落格
-中國民航大學個人門戶
;p,q4b%q2g
在派生類中重新定義時
,其函式原型
,包括返回型別
,函式名
,引數個數
,引數型別及引數的先後順序
,都必須與基類中的原型完全相同
. alz&pz y7m0
虛函式是過載的一種表現形式
,是一種動態的過載方式
.純虛函式:
純虛函式在基類中沒有定義,它們被初始化為0。
任何用純虛函式派生的類,都要自己提供該函式的具體實現。
定義純虛函式
virtual void fun(void) = 0;
非虛函式:
一般成員函式,無virtual關鍵字修飾。
至於為什麼要定義這些函式,我們可以將虛函式、純虛函式和非虛函式的功能與介面繼承與實現繼承聯絡起來:
宣告乙個純虛函式(pure virtual)的目的是為了讓派生類只繼承函式介面,也就是上面說的介面繼承。
純虛函式一般是在不方便具體實現此函式的情況下使用。也就是說基類無法為繼承類規定乙個統一的預設操作,但繼承類又必須含有這個函式介面,並對其分別實現。但是,在c++中,我們是可以為純虛函式提供定義的,只不過這種定義對繼承類來說沒有特定的意義。因為繼承類仍然要根據各自需要實現函式。
通俗說,純虛函式就是要求其繼承類必須含有該函式介面,並對其進行實現。是對繼承類的一種介面實現要求,但並不提供預設操作,各個繼承類必須分別實現自己的操作。
宣告非純虛函式(impure virtual)的目的是讓繼承類繼承該函式的介面和預設實現。
與純虛函式唯一的不同就是其為繼承類提供了預設操作,繼承類可以不實現自己的操作而採用基類提供的預設操作。
宣告非虛函式(non-virtual)的目的是為了令繼承類繼承函式介面及乙份強制性實現。
相對於虛函式來說,非虛函式對繼承類要求的更為嚴格,繼承類不僅要繼承函式介面,而且也要繼承函式實現。也就是為繼承類定義了一種行為。
總結:純虛函式:要求繼承類必須含有某個介面,並對介面函式實現。
虛函式:繼承類必須含有某個介面,可以自己實現,也可以不實現,而採用基類定義的預設實現。
非虛函式:繼承類必須含有某個介面,必須使用基類的實現。
c 介面繼承與實現繼承
所謂介面繼承,就是派生類只繼承函式的介面,也就是宣告 而實現繼承,就是派生類同時繼承函式的介面和實現。我們都很清楚c 中有幾個基本的概念,虛函式 純虛函式 非虛函式。虛函式 虛函式是指乙個類中你希望過載的成員函式,當你用乙個基類指標或引用指向乙個繼承類物件的時候,你呼叫乙個虛函式,實際呼叫的是繼承類...
C 介面繼承與實現繼承
介面繼承 派生類只繼承函式的介面 實現繼承 派生類同時繼承函式的介面和實現 虛函式是過載的一種表現方式,是一種動態的過載方式。非虛函式 繼承該函式的介面和乙份強制性實現。虛函式 會繼承該函式的介面和預設實現。純虛函式 純虛函式在基類中沒有定義,介面繼承。含有純虛函式的類無法例項化。總結來說 純虛函式...
C 之實現繼承與介面繼承
之前讀設計模式的時候突然看到這樣的兩個詞語,心裡咯噔了一下,沒有能夠一下反應出這個是什麼意思,於是去google了一下。瞬間覺得自己弱爆了,連這個都不知道。在c 中,有純虛函式和簡單虛函式這一說。純虛函式一般定義沒有直接的定義,定義需要在子類中具體給出。而對於簡單虛函式來說,如果你不想去重新定義的時...