C++virtual 虛函數、純虛函數
阿新 • • 發佈:2017-12-31
str 也不能 都是 輸出 優秀 ios image log inf
前提摘要:
虛函數聯系到多態,多態聯系到繼承。所以本文中都是在繼承層次上做文章。沒了繼承,什麽都沒得談。
虛函數定義:
指向基類的指針或引用在操作它的多態類(子類/派生類)對象時,會根據不同的類對象,調用其相應的函數,這個函數就是虛函數。
使用方法:
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 虛函數、純虛函數