设计一个不能被继承的类
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虚继承过来的&#xff0c;在调用Try的构造函数的时候&#xff0c;会直接跳过FinalClass而直接调用MakeFinal的构造函数。非常遗憾的是&#xff0c;Try不是MakeFinal的友元&#xff0c;因此不能调用其私有的构造函数。
c&#43;&#43;设计一个不能被继承的类&#xff0c;为什么必须是虚继承&#xff1f;原因分析
详解&#xff1a;https://my.oschina.net/cuilili/blog/323696
附&#xff1a;
在虚继承中&#xff0c;虚基类是由最终的派生类初始化的&#xff0c;换句话说&#xff0c;最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说&#xff0c;虚基类是间接基类&#xff0c;而不是直接基类。这跟普通继承不同&#xff0c;在普通继承中&#xff0c;派生类构造函数中只能调用直接基类的构造函数&#xff0c;不能调用间接基类的。