#include <iostream>
using namespace std;
class A
{
public:
virtual void Print()
{
cout << "A" << endl;
}
};
class B : public A
{
public:
virtual void Print()
{
cout << "B" << endl;
}
};
class C : public B
{
public:
virtual void Print()
{
cout << "C" << endl;
}
};
class D : public A
{
public:
virtual void Print()
{
cout << "D" << endl;
}
};
int main()
{
A a;
B b;
C c;
D d;
A* pa=&a;
B* pb=&b;
C* pc=&c;
D* pd=&d;
pa->Print(); // A
pa=pb;
pa->Print(); // B
pb->Print(); // B
pa=pc;
pa->Print(); // C
pc->Print(); // C
pa=pd;
pa->Print(); // D
pd->Print(); // D
return 0;
}
虛函數用於實現多態,核心理念就是通過基類訪問派生類定義的函數。
由於編寫代碼的時候並不能確定被調用的是基類的函數還是哪個派生類的函數,所以被成爲“虛”函數。
虛函數只能藉助於指針或者引用來達到多態的效果。