C 虛函式 過載與覆蓋 虛繼承

2021-06-21 23:23:02 字數 1276 閱讀 5612

1.什麼是虛函式

簡單地說,那些被virtual關鍵字修飾的成員函式,就是虛函式。虛函式的作用,用專業術語來解釋就是實現多型性(polymorphism),多型性是將介面與實現進行分離;用形象的語言來解釋就是實現一共同的方法,但因個體差異而採用不同的策略。虛函式主要通過虛函式表(v-table)來實現。

2.什麼是純虛函式

純虛函式相當於基類只提供介面而不定義具體實現,在函式宣告後加=0,如:

virtual void eat() = 0;

3.純虛函式和虛函式的區別

虛函式在派生類裡面也可以覆蓋,也可以不覆蓋的,直接使用基類的實現;但純虛函式必須在派生類中實現,因為它只提供了乙個介面。

4.1成員函式被過載的特徵

(1)相同的範圍(在同乙個類中); 

(2)函式名字相同; 

(3)引數不同; 

(4)virtual 關鍵字可有可無。 

4.2「覆蓋」是指派生類函式覆蓋基類函式,特徵是:

(1)不同的範圍(分別位於派生類與基類); 

(2)函式名字相同; 

(3)引數相同; 

(4)基類函式必須有virtual 關鍵字。 

4.3「隱藏」是指派生類的函式遮蔽了與其同名的基類函式,特徵是:

(1)如果派生類的函式與基類的函式同名,但是引數不同,此時,不論有無virtual關鍵字,基類的函式將被隱藏(注意別與過載混淆)。 

(2)如果派生類的函式與基類的函式同名,但是引數相同,但是基類函式沒有virtual 關鍵字。此時,基類的函式被隱藏(注意別與覆蓋混淆)。

static成員函式不能覆蓋和隱藏

class base

void g(float x)

void h(float x)

};class derived : public base

void g(int x)

void h(float x)

};int main()

5.虛繼承和虛基類

虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如:類d繼承自類b1、b2,而類b1、b2都繼承自類a,因此在類d中兩次出現類a中的變數和函式,這時會產生二義性。為了解決二義性,同時為了節約記憶體,b1、b2對a的繼承定義為虛擬繼承,而a就成了虛擬基類,這樣d中就只有乙份a中的變數和函式。實現的**如下:

class a;

class b1:public virtual a;

class b2:public virtual a;

class d:public b1,public b2;

C 虛函式覆蓋 過載

cbase類處於作用域的外層,派生類的方法對於其將是不可見的,即隱藏的。而在派生類中,如果有過載函式時,基類函式將會被隱藏,否則基類函式就不被隱藏。includeusing namespace std 基類 class cbase virtual void jump void run int spe...

C 虛函式覆蓋 過載

在c 語言中,虛函式是非常重要的概念,虛函式是實現c 物件導向中多型性和繼承性的基石。而多型性和繼承性則是物件導向語言的精髓。掌握虛函式才算是真正掌握c 語言,而c 語言中虛函式的繼承覆蓋與函式過載有些類似,很多初學者搞不清他們之間的關係。首先要明確覆蓋 override 與過載 overload ...

虛繼承 過載 覆蓋 隱藏

關於c 中的虛擬繼承的一些總結 1.為什麼要引入虛擬繼承 虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如 類d繼承自類b1 b2,而類b1 b2都繼承自類a,因此在類d中兩次出現類a中的變數和函式。為了節省記憶體空間,可以將b1 b2對a的繼承定義為虛擬繼承,而a就成了虛擬基類...