我试图了解何时/何地应该写一个'虚拟'关键字,以便给定类的任何后代启用多态行为,因为我无法在别处找到有关此问题的特定信息。何时在派生类中实际需要“虚拟”属性?
对于我所尝试过的,在基类中使用虚函数会自动使该函数对于任何后代都是虚拟的。然而,互联网上的许多片段经常在后代中将这些功能再次虚拟化。
struct A {
virtual void foo1() { std::cout << "[A] foo1.\n"; }
virtual void foo2() { std::cout << "[A] foo2.\n"; }
};
struct B : public A {
virtual void foo1() { std::cout << "[B] foo1.\n"; }
void foo2() { std::cout << "[B] foo2.\n"; }
};
用g ++编译这段代码我得到foo1和foo2都有多态行为。另外,即使我再次从B中派生出来并创建一个C类,并且在没有virtual关键字的情况下再次实现foo2,foo2仍然使用v表。
在派生类中仅使用virtual关键字仅用于清晰和自我记录,还是存在其他一些我不知道的效果?
派生类中的虚拟只是提供信息 –
拥抱C++ 11 * override *关键字。它修复了由这种行为引发的许多令人讨厌的维护错误。 –