了解将调用哪种方法

时间:2019-05-09 21:22:07

标签: c++ overloading

Base具有方法void foo(float a)。类SubBase公开继承,并具有方法void foo(int a)

我有sSub的实例(存储在Sub*中),并调用s->foo(1.5)Sub::foo被执行(参数被截断为1),而不是Base::foo。为什么会这样?

我很天真地希望它执行Base中定义的原始方法,因为该参数是一个浮点数。我该如何实现呢?

1 个答案:

答案 0 :(得分:4)

使用

struct Base
{
    void foo(float a);
};

struct Sub : Base
{
    void foo(int a); // Hides Base::Foo
};

Sub::foo隐藏Base::foo

您必须添加using才能允许两个重载。

struct Sub : Base
{
    using Base::foo;
    void foo(int a);
};

有关using_declaration的更多详细信息

与您通话:

Sub s;
s.foo(1.5); // Ambiguous with using, Sub::foo(int) without using.

不使用时,仅考虑一次重载,因此调用Sub::foo(int)

对于using,考虑了两个重载,但是两个重载都不比另一个重载更好,因此模棱两可。

相关问题