有没有办法禁止我的班级继承?

Jer*_*ner 16 c++ final protected keyword subclassing

假设我有一个名为"Base"的类,以及一个名为"Derived"的类,它是Base的子类,并访问受保护的方法和Base的成员.

我现在想要做的就是让它没有其他类可以继承Derived.在Java中,我可以通过声明Derived类"final"来实现这一点.是否有一些C++技巧可以给我同样的效果?

(理想情况下,我希望除了Derived之外没有其他类可以将Base子类化.我不能只将所有代码放入同一个类或使用friend关键字,因为Base和Derived都是模板化的,模板参数比Derived少的基础....)

Pet*_*wis 13

从C++ 11开始,您可以在类中添加final关键字(技术上是一个特殊标识符,因为它实际上不是关键字),例如

class Derived final
{
...
Run Code Online (Sandbox Code Playgroud)

您可以在http://en.wikipedia.org/wiki/C++11#Explicit_overrides_and_final上阅读有关最终关键字的更多信息.


Ind*_*000 9

您可以拥有' Derived' 的私有构造函数和用于实例化的公共静态Create函数


Ala*_*lan 5

禁止子类化的最简单方法是将构造函数设为私有:

class Foo
{
private:
    Foo() {}

public:
    static Foo* CreateFoo() { return new Foo; }
};
Run Code Online (Sandbox Code Playgroud)

编辑:感谢Indeera指出这需要一个静态的Factory方法