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上阅读有关最终关键字的更多信息.
禁止子类化的最简单方法是将构造函数设为私有:
class Foo
{
private:
Foo() {}
public:
static Foo* CreateFoo() { return new Foo; }
};
Run Code Online (Sandbox Code Playgroud)
编辑:感谢Indeera指出这需要一个静态的Factory方法