C++中, 一旦某个成员函数在基类中声明为虚函数,则它在所有的子类中都会成为虚函数。
换言之,如果基类中已经声明了某个函数为虚函数,则无需在子类中使用关键字virtual再去声明函数。
例如,下面程序中,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