新手講虛擬函式:怎麼實現多型
阿新 • • 發佈:2019-02-18
class B0 //基類B0宣告 {public: void display() {cout<<"B0::display()"<<endl;} }; class B1: public B0 { public: void display() { cout<<"B1::display()"<<endl; } }; class D1: public B1 { public: void display() { cout<<"D1::display()"<<endl; } };
那麼對於上例:因為B1繼承了B0,所以其中同名函式就會被B0中的函式覆蓋,所以輸出時,三個函式都只能輸出B0::display();
但是引入虛擬函式之後:
class B0 //基類B0宣告 {public: //外部介面 virtual void display() //虛成員函式 {cout<<"B0::display()"<<endl;} }; class B1: public B0 //公有派生 { public: void display() { cout<<"B1::display()"<<endl; } }; class D1: public B1 //公有派生 { public: void display() { cout<<"D1::display()"<<endl; } };
因為定義了虛擬函式,所以通過指標呼叫時呼叫的都是自己類中的成員函式,而不會同名函式只調用基類中的函式,這樣增加了多型性