转自https://blog.csdn.net/shltsh/article/details/45999727
C++中, 一旦某个成员函数在基类中声明为虚函数,则它在所有的子类中都会成为虚函数。换言之,如果应该在基类中声明了某个函数为虚函数,则无需在子类中使用关键字virtual再去声明函数。
可以参考: http://www.umsl.edu/~subramaniana/virtual2.html
例如,下面程序中,B::fun() 会自动成为一个虚函数
#include<iostream>
class A
{
public:
virtual void fun()
{
std::cout << "A::fun() called \n";
}
};
class B : public A
{
public:
void fun()
{
std::cout << "B::fun() called \n";
}
};
class C : public B
{
public:
void fun()
{
std::cout << "C::fun() called \n";
}
};
int main()
{
C c; // C的对象
B *b = &c; // 类型为B*的一个指针,指向对象c
b->fun(); // 这行代码会打印 "C::fun() called"
A *a = &c;
a->fun(); //这行代码会打印 "C::fun() called"
return 0;
}
输出:C::fun() called
C::fun() called