物件導向 多型(虛函式)

2021-10-07 09:40:33 字數 2052 閱讀 2157

虛函式:用關鍵字virtual修飾的、類的成員函式;

虛函式定義:語法形式

class

x

虛函式的意義(即虛函式的虛特徵)

基類指標(或引用)>指向 派生類的物件時,通過該指標(或引用)訪問派生類中的虛函式時,將呼叫該指標(或引用)實際所指物件的成員函式!(指標和引用給基類的是派生類的位址

例子:

classb}

classd:

public b

}void

main()

輸出 :b::f(

)

classb}

classd:

public b

}void

main()

輸出 :d::f(

)

總結:

通過指向派生類物件的基類指標(或基類引用)訪問函式成員f()時,

步驟一:在基類中,用virtual宣告成員函式為虛函式;

步驟二:在派生類中重定義(覆蓋)此函式;

步驟三:定義乙個指向派生類物件、基類型別的指標變數(或引用);

步驟四: 通過該基類指標變數(或引用)呼叫此虛函

1、一旦將某個成員函式宣告為虛函式後, 如b::f(),它在繼承體系中就永遠成為虛函式了!

#include

using

namespace std;

classa;

};classb:

public a };

classc:

public b };

classd:

public c };

void

main()

訪問的是派生類中基類a的物件(因為a的f()並不是虛函式),此為賦值相容。

賦值相容:由基類的指標訪問派生類中間的基類物件

2、如果基類定義了虛函式,當通過基類指標(或引用)呼叫派生類物件時,將訪問到它們實際所指物件中的虛函式版本

#include

using

namespace std;

classa;

};classb:

public a };

classc:

public b };

classd:

public c };

void

main()

3、只有通過基類物件的指標和引用訪問派生類物件的虛函式時,才能體現虛函式的特性。

#include

classb;

};classd:

public b;}

;void

main()

只能通過基類物件的指標和引用才能實現虛函式的特性

4、派生類中的虛函式要保持其虛特徵,必須與基類中的函式原型完全相同,否則就是普通的過載函式,與基類的虛函式無關。

#include

classb;

};classd:

public b};

void

main()

5、派生類通過從基類繼承來的成員函式 呼叫 虛函式時,將訪問到派生類中的版本。

多型性與虛函式 物件導向程式設計

多型性 向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同 的行為。靜態多型性 由函式中在和運算子過載形成。動態多型性 通過虛函式實現。先建立乙個point類,包含資料成員x,y 座標點 以它為基類,派生出乙個circle 圓 類,增加資料成員r 半徑 再以circle類為直接基類,派生出乙個...

C 物件導向基礎 6 虛函式與多型

非虛函式 常規的函式,在繼承時不希望子類重寫 override 如int objectid const 虛函式 前面加了關鍵字 virtual 的函式,在繼承時希望子類重寫,但已有預設定義 如virtual void error const std string msg 純虛函式 前面加了關鍵字 v...

C C 物件導向程式設計特性 多型(虛函式表原理)

include include using namespace std 定義兩個函式指標型別 typedef void pfunc void typedef int psum int,int 定義測試基類 class a private 定義私有的虛函式sum 用於測試 virtual int su...