设计一个不能被继承的类
template <typename T>
class MakeFinal
{
friend T;
private :
MakeFinal() {}
~MakeFinal() {}
};
class FinalClass : virtual public MakeFinal<FinalClass>
{
public :
FinalClass2() {}
~FinalClass2() {}
};
class Try : public FinalClass
{
public :
Try() {}
~Try() {}
};
Try temp;
由于类FinalClass是从类MakeFinal虚继承过来的,在调用Try的构造函数的时候,会直接跳过FinalClass而直接调用MakeFinal的构造函数。非常遗憾的是,Try不是MakeFinal的友元,因此不能调用其私有的构造函数。
c++设计一个不能被继承的类,为什么必须是虚继承?原因分析
详解:https://my.oschina.net/cuilili/blog/323696
附:
在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。