標籤:namespace 函數實現 基類 程式員 aaa 靜態 文章 src 指標
前提摘要:
虛函數聯絡到多態,多態聯絡到繼承。所以本文中都是在繼承層次上做文章。沒了繼承,什麼都沒得談。
虛函數定義:
指向基類的指標或引用在操作它的多態類(子類/衍生類別)對象時,會根據不同的類對象,調用其相應的函數,這個函數就是虛函數。
使用方法:
1.只需要在成員函式宣告前使用關鍵字“virtual”將函式宣告為虛函數(子類中可加可不加,沒加系統會自動判定為虛函數,為了閱讀性,建議加上),而函數實現不需要使用關鍵字“virtual”。
2.非類的成員函數不能定義為虛函數,類的成員函數中靜態成員函數和建構函式也不能定義為虛函數,但可以將解構函式定義為虛函數。實際上,優秀的程式員常常把基類的解構函式定義為虛函數。因為,將基類的解構函式定義為虛函數後,當利用delete刪除一個指向衍生類別定義的對象指標時,系統會調用相應的類的解構函式。而不將解構函式定義為虛函數時,只調用基類的解構函式。
測試代碼:
#include <iostream>using namespace std;class A{public: A(){} virtual ~A(){} virtual void print();};void A::print(){ cout << "aaaa" << endl;}class B:public A{public: B(){} ~B(){} void print() { cout << "bbbb" << endl; }};int main(){ A *a1 = new A; A *a2 = new B; a1->print(); a2->print(); return 0;}
輸出結果:
純虛函數:
1、純虛函式宣告如下: virtual void funtion1()=0;
2.有純虛函數的類是抽象類別,不能產生對象,只能派生。
3.定義了純虛函數的類不可執行個體化;其衍生類別沒有為該純虛函數定義實現方法也不可執行個體化;
C++\virtual 虛函數、純虛函數