源码:
///
// Define a class which can't be derived from
///
template<typename> class MakeFinal
{
friend T;
private:
MakeFinal(){}
~MakeFinal(){}
};
class FinalClass : virtual public MakeFinal<FinalClass>
{
public:
FinalClass(){}
~FinalClass(){}
};
源码分析:我们可以像使用一般类使用FinalClass,但是它不可以被继承。首先,因为FinalClass类为MakeFinal类的友元类,所以尽管MakeFinal类的构造函数和析构函数是私有的,但是仍然可以在FinalClass中调用MakeFinal类的构造函数和析构函数。当我们试图从FinalClass继承一个类并创建它的实例的时候,因为继承类并不是MakeFinal类的友元,不能调用MakeFinal的私有构造函数,导致编译错误。这样就在C++中实现了不可被继承的类。