虛函式與純虛函式

2021-06-27 19:23:02 字數 1313 閱讀 2653

1、基本形式:

virtual

returntype function_1(); 

//虛函式宣告

virtual returntype function_2() = 0; 

//純虛函式宣告

先講示例吧,再總結結論。

2、示例:

classanimail

這段**的輸出結果是什麼呢?起初我認為是:animail::function_1()與dog::function_1(), 因為第一次輸出是引用基類animail的例項,第二次輸出是引用子類dog的例項。事實上答案是animail::function_1()與 animail::function_1(),為什麼呢?

這裡我們需要明白:你就記住,不管引用的例項是哪個類的,當你呼叫的時候,系統會呼叫左值那個物件所屬類的方法。比如說 上面的**類animail和 dog都有乙個function_1函式,因為p是乙個animail類的指標,所以不管你將p指標指向類animail或是類dog,最終呼叫的函式都是類animail的function_1函式。這就是靜態聯篇,編譯器在編譯的時候就已經確定好了。可是如果我想實現跟據例項的不同來動態決定呼叫哪個函式呢?這就須要用到虛函式(也就是動態聯篇)。

class animail;

classdog: public animail;

};classpig: public animail{

public:

virtual void getcolor() {cout <<"white"《沒有定義。

虛函式1, 虛函式是非靜態的、非內聯的成員函式。

2, 若類中乙個成員函式被說明為虛函式,則該成員函式在派生類中可能有不同的實現。當使用該成員函式操作指標或引用所標識的物件時,對該成員函式呼叫可採用動態聯編。

5, 定義了虛函式後,程式中宣告的指向基類的指標就可以指向其派生類。在執行過程中,該函式可以不斷改變它所指向的物件,呼叫不同版本的成員函式,而且這些動作都是在執行時動態實現的。虛函式充分體現了物件導向程式設計的動態多型性。虛函式充分體現了物件導向程式設計的動態多型性。

純虛函式

1, 當在基類中不能為虛函式給出乙個有意義的實現時,可以將其宣告為純虛函式,其實現留待派生類完成。

2, 純虛函式的作用是為派生類提供乙個一致的介面,它只是個函式的宣告而已,它告訴編譯器,在這個類中的這個純虛函式是沒有函式定義的,該類不能建立物件(即不能例項化),但可以宣告指標,該類的派生類負責給出這個虛函式的過載定義。

虛函式與純虛函式

參考 虛函式 比如 virtual void function1 virtual關鍵字修飾的 成員函式 就是虛函式。把基類的成員函式 設為virtual,其 派生類的相應的函式也會自動變為虛函式。指向 基類的指標在操作它的 多型類物件時,會根據不同的類物件,呼叫其相應的函式,這個函式就是虛函式。純虛...

虛函式與純虛函式

1 基本形式 virtual returntype function 1 虛函式宣告 virtual returntype function 2 0 純虛函式宣告 先講示例吧,再總結結論。2 示例 classanimail 這段 的輸出結果是什麼呢?起初我認為是 animail function 1...

虛函式與純虛函式

在c 中虛函式是實現多型的一種機制,核心理念就是通過基類訪問派生類定義的函式。最常見的例子就是如下 class a class b public a int main void 這裡函式foo通過關鍵字virtual宣告為了虛函式,主函式中定義了乙個父類a的指標a,指向乙個子類b,此時再用a去呼叫f...