询问者
限制类或函数被派生

常规讨论
-
在系统开发过程中,我们需要通过对程序进行特殊的限制来表达那些是接口,那些是内部的实现。而C++不像Java或C#。拥有public class或者interface的keyword。
在这里介绍在C++中如何限制类或函数被派生。首先我们看几个例子。
class InterClass{ }; class B :public InterClass { };
在这里InterClass只是一个内部的实现,模块的开发人员可能在下一个版本中由于需要将这个类重构,或完全删除这个类。这个时候派生于这个类的类B,在拿到新的版本后,就会有很大的代码变化,同时需要进行大量的测试。
class A{ public: virtual void Interfunc(); } class B: public A{ public: virtual void Interfunc(); }
class A{
public:
void Interfunc(); //remove virtual
}
class B: public A{
public:
virtual void Interfunc();
}上面这个例子是A定义了虚函数virtual void Interfunc();。但这个虚函数在重构之后取消了虚函数的特性。那么派生类B可能还认为是虚函数。导致bug产生。
首先,那么我们看怎么在C++禁止一个类被派生。首先在VC11中使用了final的keyword。用来修饰class。使用这个keyword可以保证该类不被派生。
但是目前我们还没有这个keyword。我做了一个简单的代码可以帮助实现这个功能
class FinalSupportClass { protected: FinalSupportClass() { } }; #define FINALCLASS : virtual private FinalSupportClass
不惜
麻烦把正确答案设为解答。