c++ - 重载虚拟方法与非虚拟方法有何不同?

标签 c++ polymorphism operator-overloading virtual

这两者有什么区别:

  • 声明基类函数为virtual并改变派生类 功能。
  • 重载继承的非虚函数。

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

最佳答案

当您将基类方法声明为虚拟时,为了覆盖它,您需要在派生类中提供一个具有完全相同签名的函数(协变返回类型 是允许的)。

如果您的函数名称相同但派生类中的签名与基类中的签名不同而不是不再重写,它是 function Hiding ,派生类方法隐藏了基类方法。

函数重载永远不会跨类,您可以在同一个类或自由函数中重载方法,但不能跨类。当您尝试跨类执行此操作时,您最终得到的是函数隐藏。

要将基类方法引入派生类的范围内,您需要添加一个
using functionName 添加到派生类。

编辑:
至于什么时候使用 virtual 过度重载的问题,答案是:
如果您打算为运行时多态性覆盖您的类的函数,您应该将它们标记为virtual,如果您不打算这样做,则不要标记。

好读:
When to mark a function in C++ as a virtual?

关于c++ - 重载虚拟方法与非虚拟方法有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9756646/

相关文章:

c++ - 内部类的不可见运算符<<重载

c++ - MSVC 11 支持 std::thread 吗?

c++ - 通过非模板化基类的模板化多态性

c# - C#中的虚拟继承

Perl 重载怪异

c++ - 在 C++ 中,如果用户输入的内容与输入的数组匹配,如何返回数组的索引?

c++ - qt 5.2串口写问题与windows 7

c++ - 继承类在这种情况下如何工作???

c++ - 确定类是否实现 operator() 的任何方法

kotlin - 如何(强制)在 Kotlin 中重载整数的加号?