gpt4 book ai didi

c++ - 了解将调用哪个方法

转载 作者:行者123 更新时间:2023-11-27 22:34:52 24 4
gpt4 key购买 nike

Base 有一个方法 void foo(float a)。类 Sub 公开继承自 Base 并有一个方法 void foo(int a)

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

我会天真地期望它执行 Base 中定义的原始方法,因为参数是一个 float 。我怎样才能实现这一目标?

最佳答案

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 时,两种重载都会被考虑,但没有一个比另一个更匹配,所以它是不明确的。

关于c++ - 了解将调用哪个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com