虛函數: 一個成員函數, 該函數在基類的內部聲明並且被派生類重新定義, 為了創建虛函數, 應在基類該函數
聲明的前面加上virtual關鍵字
如果一個類的某個成員函數被說明為虛函數, 意味着該成員在派生類中可能存在不同的實現方式, 當繼承包含
虛函數的類時, 派生類將重新定義該虛函數以符合自身的需要.
聲明的前面加上virtual關鍵字
如果一個類的某個成員函數被說明為虛函數, 意味着該成員在派生類中可能存在不同的實現方式, 當繼承包含
虛函數的類時, 派生類將重新定義該虛函數以符合自身的需要.
動態聯編需要滿足三個條件:
1 類之間滿足兼容賦值規則
2 聲明虛函數
3 使用類的指針或者引用訪問虛函數或者通過成員函數調用虛函數
1 類之間滿足兼容賦值規則
2 聲明虛函數
3 使用類的指針或者引用訪問虛函數或者通過成員函數調用虛函數
虛函數只能是非靜態成員函數
構造函數能重載, 不能定義為虛函數, 而析構函數不能重載, 但是可以被定義為虛函數
代碼示例:
#include <iostream> using namespace std; /* 虛函數: 一個成員函數, 該函數在基類的內部聲明並且被派生類重新定義, 為了創建虛函數, 應在基類該函數 聲明的前面加上virtual關鍵字 如果一個類的某個成員函數被說明為虛函數, 意味着該成員在派生類中可能存在不同的實現方式, 當繼承包含 虛函數的類時, 派生類將重新定義該虛函數以符合自身的需要. 動態聯編需要滿足三個條件: 1 類之間滿足兼容賦值規則 2 聲明虛函數 3 使用類的指針或者引用訪問虛函數或者通過成員函數調用虛函數 */ class A49 { public: A49(); void callVtFunc(); virtual void vtFunc(); }; class B49 : public A49 { public: B49(); virtual void vtFunc(); }; int main() { A49 a; B49 b; a.callVtFunc(); b.callVtFunc(); system("pause"); } A49::A49() { } void A49::callVtFunc() { vtFunc(); } void A49::vtFunc() { cout << "function of A49" << endl; } B49::B49() { } void B49::vtFunc() { cout << "function of B49" << endl; }