【发布时间】:2010-12-16 15:12:42
【问题描述】:
假设我有一些这样的代码:
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);
};
如果我有一个具体类型的对象,为什么我不能调用 Foo(int)?
如果我更改 Foo(double) 的名称以使其不重载 Foo,那么一切都很好,两种方法都可以访问,但这不是我想要的。
同样,如果我删除 Concrete 类并在 Derived 中实现 Foo(double),那么两者都可以访问,但同样不是我想要的。
【问题讨论】:
-
我不明白这个问题。 GCC 版本 3.3.6 和 4.2.4 都可以毫无怨言地编译此代码。
-
由于整数到双精度的隐式转换 - 尝试向函数添加跟踪并执行
Concrete c; int i=1; c.Foo(i); -
在子类中重新定义虚方法不叫覆盖吗?
标签: c++ inheritance overloading