虛擬函數是指:在某一基底類別中宣告為virtual並且在一個或多個衍生類別中被重新定義的成員函數,即被virtual關鍵字修飾的成員函數;格式為「virtual 函數傳回型別函數名(參數表) {函數體}」。
在某基類別中宣告為virtual 並且在一個或多個衍生類別中被重新定義的成員函數,用法格式為:virtual函數傳回型別函數名稱(參數表) {函數體}
;實作多態性,透過指向衍生類別的基底類別指標或引用,存取衍生類別中同名覆寫成員函數。
簡單來說,那些被virtual關鍵字修飾的成員函數,就是虛函數。
首先:強調一個概念定義一個函數為虛函數,不代表函數為不被實現的函數。定義它為虛函數是為了允許用基底類別的指標來呼叫子類別的這個函數。定義一個函數為純虛函數,才代表函數沒有被實現。定義純虛函數是為了實作一個接口,起到一個規範的作用,規範繼承這個類別的程式設計師必須實作這個函數。
例:
class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class B:public A { public: void foo() { cout<<"B::foo() is called"<<endl; } }; int main(void) { A *a = new B(); a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! return 0; }
這個例子是虛函數的典型應用,透過這個例子,也許你就對虛函數有了一些概念。它虛就虛在所謂「推遲聯編」或「動態聯編」上,一個類別函數的呼叫並不是在編譯時刻被決定的,而是在運行時刻被決定的。由於寫程式碼的時候並不能確定被呼叫的是基底類別的函數還是哪個衍生類別的函數,所以被成為「虛」函數。虛函數只能藉助指標或引用來達到多態的效果。
以上是什麼是虛函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!