我知道我不需要在子类中将覆盖函数声明为 virtual
。但是,如果我在子类中使用虚函数,是否需要将子类函数声明为 virtual
?
struct Base
{
virtual int foo();
};
struct Derived : Base
{
virtual int foo() override
{
// ...
}
};
struct DoubleDerived : Derived
{
int foo() override
{
// ...
}
};
最佳答案
你不必,反正这个函数是虚拟的,但它无疑使它变得清晰。以前(在 override
可用之前)您可以覆盖某些函数,然后如果在基类中更改了该函数,您的派生类将不会再覆盖它并且代码将编译而不会出现任何问题。您在派生类中的函数不会覆盖任何东西,并且会变成非虚拟的。
与 override
编译器会防止这种错误,如果基数改变,函数就不会神奇地变成非虚拟的。换句话说,如果 override或 final被使用,暗示函数是virtual ,否则会编译错误。
关于c++ - 在子类中重写时我应该重用虚拟吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44103547/