有没有办法指定或断言子类必须重新实现特定的非抽象虚方法?

Vio*_*ffe 4 c++ inheritance

这就是我的意思.我有一个类层次结构:

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

class B : public A {
   int f() override {return 5;}
   void doSpecificStuff() {}
}
Run Code Online (Sandbox Code Playgroud)

B是一个自给自足的类,可以单独使用.但它也有许多后代:

class C : public B {
   int f() override {return 171;}
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以确保f在子类化时我不会忘记重新实现B

Rei*_*ica 5

这个解决方案的灵感来自@dyp的评论:

你可以分开两个职责B,即"提供B式实现"和"可以实例化".

class B_for_implementation : public A
{
  void doSpecificStuff();
};

class B_for_objects final : public B_for_implementation
{
  int f() override {return 5;}
};

class C final : public B_for_implementation
{
  int f() override {return 171;}
};
Run Code Online (Sandbox Code Playgroud)

将创建自包含对象B_for_objects,而其他类将派生自B_for_implementation.