C++ 将虚拟函数重写为非虚拟函数是否正常?

C++ 将虚拟函数重写为非虚拟函数是否正常?,c++,inheritance,virtual-functions,C++,Inheritance,Virtual Functions,还好吗? 或者它会制造一些问题? 我认为它坚持“不要从派生类继承”。一旦您将基类中的foo()函数标记为virtual它在派生类中是隐式的virtual,即使您没有在它前面提到关键字virtual。virtual是继承的。即使未声明重写的方法virtual,它也将是虚拟的 因此,如果您使用Base指针或引用访问Derived的对象,它将调用Derived的foo。所以,即使你不把它声明为虚拟的,它实际上也是虚拟的 您将其显式声明为虚拟的原因是为了更好地说明,以便阅读此代码的任何人都可以立即理解它

还好吗? 或者它会制造一些问题?
我认为它坚持“不要从派生类继承”。

一旦您将基类中的
foo()
函数标记为
virtual
它在派生类中是隐式的
virtual
,即使您没有在它前面提到关键字
virtual

virtual
是继承的。即使未声明重写的方法
virtual
,它也将是虚拟的


因此,如果您使用
Base
指针或引用访问
Derived
的对象,它将调用
Derived
foo
。所以,即使你不把它声明为虚拟的,它实际上也是虚拟的


您将其显式声明为虚拟的原因是为了更好地说明,以便阅读此代码的任何人都可以立即理解它是一个虚拟函数,而无需检查基类声明。

请使用您所说的语言(我想是C++语言)标记您的问题.是的,请按C中的标记标记,它将给您以下警告。“隐藏继承的成员Base.foo()。若要使当前成员重写该实现,请添加override关键字。否则,请添加新关键字。”您可以阅读有关它的内容,但这是不可能的。即使您没有这样说,该函数仍然是虚拟的。将其标记为虚拟可以保证它是虚拟的,即使基类的成员函数具有与非虚拟函数相同的签名。没有捷径可以让你在不理解你在做什么的情况下编写正确的代码。(好的,新的
override
关键字可能会让懒惰的程序员的生活更轻松……)
class Base
{
    virtual void foo();
}


class Derived : public Base
{
    void foo();
}