虛函數可以讓成員操作一般化
看一段代碼:
#include<iostream>
using namespace std;
class 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;}
};
void fun(B0 *ptr){ptr->display();}
int main(){
B0 b0; B1 b1; D1 d1; B0 *p;
p = &b0; fun(p);
p = &b1; fun(p);
p = &d1; fun(p);
system("pause");
return 0;
}
此處的函數都不是虛函數。
主函數裏定義了一個類型爲B0的指針p,
接下來調用指針p的fun函數。
與Java類似,基類指針調用非虛函數時,不管其指向的是哪一個類型的對象,都是調用基類的重載函數。
所以輸出會是:
B0::display()
B0::display()
B0::display()