在另一个(来自抽象父级)父级中定义抽象方法?

Define abstract method in another (from abstract parent) parent?

我希望在我的代码中 C++ 会注意到在 class D 中来自 class C 的抽象方法已经在 A 中定义。但事实并非如此。类似的代码可以在 Java 中使用(其中 C 充当接口)。目前它失败并输出:

error: cannot declare variable ‘x’ to be of abstract type ‘D’
note:   because the following virtual functions are pure within ‘D’:
note:   virtual void C::secret()

让它发挥作用的最佳方法是什么?

#include <iostream>

class A {
  public:
    virtual void secret() {
      std::cout<<"secret a func\n";
    };
};

class B: public A {};

class C {
  public:
    virtual void secret() = 0;
};

class D: public B, public C {};

int main() {
  D x;
  return 0;
}

class D 显然是抽象的,因为它没有提供 C 中定义的 secret 的实现。类型 D 读起来不明确,因为不清楚它的成员 secret 是否会继承自 CA

您的层次结构如下:

A 有一个名为 secret 的虚成员函数。而 C 有一个 完全不相关的 纯虚成员函数,名为 secret。由于 D 不提供覆盖 C::secret,因此 D 也被视为抽象 class。 A::secret 存在并不重要 - A 不继承自 C 并且只有基础 classes 可以提供虚拟覆盖。

如果您想使用 A::secret 覆盖 C::secret,您必须明确地这样做:

class D: public B, public C {
    void secret() override {
        A::secret();
    }
};