如果仅部分覆盖重载函数,则多态性不起作用

Posted

技术标签:

【中文标题】如果仅部分覆盖重载函数,则多态性不起作用【英文标题】:Polymorphism not working if overloaded functions are being overridden only partially 【发布时间】:2012-08-20 05:38:05 【问题描述】:

今天我觉得自己像个菜鸟:

class Base

public:
    virtual void foo(int)=0;
    virtual void foo(int, int) 
    virtual void bar() 
;

class Derived : public Base

public:
    virtual void foo(int) 
;

void main()

    Derived d;
    d.bar(); // works
    d.foo(1); // works
    d.foo(1,2); // compiler error: no matching function call

我希望 dBase 继承 foo(int, int),但事实并非如此。那么我在这里错过了什么?

【问题讨论】:

【参考方案1】:

这是因为同名的基函数被隐藏了。

您需要将using 用于您未覆盖的功能:

class Derived : public Base

public:
    using Base::foo;
    virtual void foo(int)   //this hides all base methods called foo
;

【讨论】:

【参考方案2】:

它叫做Name hiding。你通过提供Derived::foo(int)来隐藏Base::foo(int, int)

【讨论】:

以上是关于如果仅部分覆盖重载函数,则多态性不起作用的主要内容,如果未能解决你的问题,请参考以下文章

什么情况下是重载,什么情况下是重写,什么情况下是覆盖

如果 @Configuration 类中存在空构造函数,则 Spring @DynamicPropertySource 不起作用

为啥在父类的构造函数中调用重载函数时,在 ES6 类上设置属性不起作用

Informatica Cloud DB2 for i cdc 连接类型 SQL 覆盖不起作用

打字稿重载箭头功能不起作用

目标 C:如果将标签添加到单元格,则 UITable 方法“didSelectRowAtIndexPath”不起作用