1. 程式人生 > >新手講虛擬函式:怎麼實現多型

新手講虛擬函式:怎麼實現多型

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; } };

因為定義了虛擬函式,所以通過指標呼叫時呼叫的都是自己類中的成員函式,而不會同名函式只調用基類中的函式,這樣增加了多型性