c++ - 未实现的纯虚方法问题

标签 c++ design-patterns inheritance

我有以下接口(interface) A:

class A
{
    virtual void f() = 0;
}

我还有从 A 派生的接口(interface) B、C:

class B : public A
{
    ...
}

class C : public A
{
    ...
}

类 X 实现 B,Y 实现 C。它们都派生自类 D

class X : public D, public B {...}
class Y : public D, public C {...}

这两个类都具有相同的 A::f() 实现,因此我将此实现移至 D。现在,当我尝试实例化 X 或 Y 时,我收到一个错误,指出未为它们实现 f()。

看起来虽然在基类中实现了同样的方法,但是编译器并没有将其识别为纯虚函数的实现。我应该怎么办?

最佳答案

D::f() 的实现对A::f() 一无所知。您必须从 A 派生 D(以及从 D 派生 BC ) 或在 XY 中实现 f()。实现可能非常简单 - 只是调用 D 中的函数(但不要调用它 D::f() 以避免歧义)。

编辑:(添加信息)

不过,如果您可以在类之间自由移动此函数,我什至不确定它是否必须是方法,而不是辅助函数。

关于c++ - 未实现的纯虚方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21203988/

相关文章:

c++ - 访问冲突写入位置 0xcccccccc 使用字符串

python - 返回非实例化类类型的类型提示

c++ - 需要帮助以使用MFC C++创建图形

c++ - 将字符串解析为 LPCWSTR

java - java中装饰器设计模式的问题

java - 使用 arraylists 得到错误的输出

c++ - 为什么不应该从 C++ 标准字符串类派生?

Java 覆盖不同类型的类成员

c++ - 以最小的开销删除多余的参数包参数

java - 避免模​​ block 之间的依赖