use*_*898 24 c++ inheritance virtual-functions
为什么我在谈论子类化/继承时有时会在C++示例中看到,基类有虚拟关键字,有时被覆盖的函数也有虚拟关键字,为什么有时需要向子类添加虚拟关键字?例如:
class Base
{
Base(){};
virtual void f()
......
}
};
class Sub : public Base
{
Sub(){};
virtual void f()
...new impl of f() ...
}
};
Run Code Online (Sandbox Code Playgroud)
Dav*_*eas 32
没有必要,但如果您只看到派生类定义,它有助于提高可读性.
§10.3[class.virtual]/3
如果虚拟成员函数vf在类Base和Derived类中声明,直接或间接从Base派生,则声明具有与Base :: vf相同名称和相同参数列表的成员函数vf,然后Derived :: vf也是虚拟的(无论是否如此声明)并覆盖97) Base :: vf.
脚注97)基本上表明如果参数列表不同,则函数不会覆盖也不一定virtual