【发布时间】:2013-10-06 19:34:05
【问题描述】:
标题可能不是很有描述性,但很难用一句话来描述我想要的。
所以我有一个这样的基类:
class IBase
{
public:
virtual void f(int) = 0;
virtual void f(float) = 0;
}
然后我创建一个抽象类,它只为浮点定义 f:
class HelpBase: public IBase
{
public:
virtual void f(float arg) override
{
f(static_cast<int>(arg));
}
}
我的目标是提供一个抽象类 HelpBase,然后它将被其他实现 f(int) 的类继承;
在我的 HelpBase 中,我想使用 f(int),它在运行时将由这些类之一提供,但我不知道如何调用它。
在上面的示例中,编译器 (gcc) 符合“f(int)”对于 HelpBase 是未知的。
我不能把它写成 IHelpBase::f() 因为它会强制使用 IHelpBase 的纯虚拟成员(gcc 也抱怨)。如何使用在基类中声明但实际上在某些继承中定义的函数?
如果我使用两个不同的名称,例如 f 代表浮点数和 g 代表整数,则没有问题。然后我可以调用 g(static_cast(arg));在我的 HelpBase 中,它按预期工作。
【问题讨论】:
-
@EdS。为什么它会是一个未定义的函数? HelpBase 是一个抽象类,不能实例化。必须有任何其他类将继承它,并定义缺少纯虚函数。
标签: c++