这就是我的意思.我有一个类层次结构:
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?
这个解决方案的灵感来自@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.