gpt4 book ai didi

c++ - 在 C++ 中重载子类中的方法

转载 作者:可可西里 更新时间:2023-11-01 15:38:43 26 4
gpt4 key购买 nike

假设我有这样的代码:

class Base {
public:
virtual int Foo(int) = 0;
};

class Derived : public Base {
public:
int Foo(int);
virtual double Foo(double) = 0;
};

class Concrete : public Derived {
public:
double Foo(double);
};

如果我有一个 Concrete 类型的对象,为什么我不能调用 Foo(int)?
如果我更改 Foo(double) 的名称以便它不会重载 Foo,那么一切都很好并且两种方法都可以访问,但这不是我想要的。
同样,如果我删除 Concrete 类并在 Derived 中实现 Foo(double),那么两者都可以访问,但同样,这不是我想要的。

最佳答案

名称查找发生在重载解析之前,所以一旦在 Concrete 中找到了 Foo,基类将不会搜索其他名为 Foo Derived 中的 int Foo(int)Concrete 中的 Foo 隐藏。

您有多种选择。

将调用更改为显式。

concrete.Derived::Foo(an_int);

向 Concrete 添加 using 声明。

class Concrete : public Derived {
public:
using Derived::Foo;
double Foo(double);
};

通过基引用调用函数。

Derived& dref = concrete;
dref.Foo(an_int);

关于c++ - 在 C++ 中重载子类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1734893/

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