【问题标题】:overload virtual function with different parameters in c++在c ++中重载具有不同参数的虚函数
【发布时间】:2014-12-01 11:16:06
【问题描述】:

我想在 c++ 中用不同的参数重载虚函数,但它不起作用。

virtual void Draw( int nDeltaX, int nDeltaY);
virtual void Draw( int nDeltaX, int nDeltaY, bool m_bFlag);

你能告诉我原因吗?

【问题讨论】:

  • 请详细说明您的问题。怎么不行?
  • 如果你使用不同的参数,那么你不会覆盖,而是重载函数。至于你的问题,你能告诉我们你尝试了什么吗?最好创建一个Minimal, Complete, and Verifiable example 并向我们展示。还包括更多详细信息,例如您遇到的错误、预期和实际行为等。
  • 我在类 Base{virtual void Draw(int nDeltaX, int nDeltaY);} 中有一个函数我想在 Derived 类中重载函数 Draw{virtual void Draw(int nDeltaX, int nDeltaY, bool m_bFlag );} 再加一个参数 bool m_bFlag.
  • 请通过MCVE 澄清您的问题。我相信我知道您的问题的解决方案,但在明确您的问题到底是什么之前,我无法确定。
  • @MiroslavAvramov:您可以按照您的描述重载加载函数,并通过派生类调用它。但它不会覆盖覆盖基类函数,因为覆盖必须匹配签名才能通过基类调用而不知道派生类是什么。您能否准确描述您想要实现的目标,以及究竟出了什么问题?

标签: c++


【解决方案1】:

答案是——因为这就是 C++ 的工作方式。参数必须相同。 C++11 标准在 10.3.2 中说:

如果虚成员函数 vf 在类 Base 和 Derived 类中声明,直接或间接从 Base 派生,则具有相同名称的成员函数 vf,parameter-type-list (8.3.5),cv-限定和 refqualifier(或不存在相同)作为 Base::vf 被声明,然后 Derived::vf 也是虚拟的(无论是否如此声明)并且它覆盖 11 1 Base::vf。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多