当基类指针指向一个子类对象,通过这个指针调用子类中和基类同名成员函数的时候,基类声明为虚函数时机会调用子类的成员函数,不声明就会调用基类。举个例子
#include <iostream>
using namespace std;
class A
{
public :
virtual void foo() = 0;
// {
// cout << "class_A" << endl;
// }
};
class B: public A
{
public :
void foo()
{
cout << "class_B" << endl;
}
};
int main() {
A* a = new B();
a->foo(); //输出class_B
return 0;
}
有啥用呢?参考这个链接的回答知乎
定义一个叫怪物的基类,并定义一个叫攻击的虚函数,基类派生若干个子类比如金刚、浩克,重新实现’攻击‘这个函数,定义一个基类指针数组,分别指向子类,这样通过数组中的指针调用攻击函数时就会分别调用金刚和浩克的攻击函数。
这里巧妙的使用了虚函数的性质,数组存储相同类型指针变量,却能调用不同子类的方法。