我知道我不需要在子类中声明覆盖函数virtual
。但是,如果我在子子类中使用虚函数,我是否需要将子类函数声明为virtual
?
struct Base
{
virtual int foo();
};
struct Derived : Base
{
virtual int foo() override
{
// ...
}
};
struct DoubleDerived : Derived
{
int foo() override
{
// ...
}
};
答案 0 :(得分:4)
你不必,这个功能无论如何都是虚拟的,但它无疑是明确的。以前(在override
可用之前)你可以覆盖一些函数,然后如果函数在基类中被更改,你的派生类将不再覆盖它,代码将编译而没有任何问题。你在派生类中的函数不会覆盖任何东西,而且会变成非虚拟的。
使用override
编译器可以防止出现这种错误,如果更改了base,则该函数不能神奇地变为非虚拟。换句话说,如果使用override或final,则表示函数为virtual,否则会出现编译错误。
答案 1 :(得分:0)
我刚发现Core guideline C.128声明:
Virtual functions should specify exactly one of virtual, override, or final.