如何重载Virtual方法与非虚方法有何不同?

Das*_*aru 8 c++ polymorphism virtual operator-overloading

这两者有什么区别:

  • 声明基类函数virtual并更改派生类函数.
  • 重载继承的非虚函数.

你什么时候用一个而不是另一个?

Alo*_*ave 6

当您将Base类方法声明为virtual,为了覆盖它,您需要在Derived类中提供具有完全相同签名的函数(尽管允许使用Co-variant返回类型).

如果你的函数名是相同的,但是Derived类中的签名与Base类中的签名不同,那么它不再是overidding,它是函数Hiding,派生类方法隐藏了Base类方法.

函数重载永远不会跨类,您可以在同一个类或自由函数内重载方法,但不能跨类.当你尝试跨类时,你最终得到的是函数隐藏.

要将Base类方法引入Derived类的范围,您需要向Derived类添加一个
额外的方法using functionName.

编辑:
对于何时使用virtual重载的Q ,答案是:
如果您希望为运行时多态性重写类的函数,则应将它们标记为virtual,而不是如果您不打算这样.

好读:
何时将C++中的函数标记为虚拟?