题目:用C++设计一个不能被继承的类。
方法1:把构造函数设为私有函数。使用静态函数获得类型的实例。缺点:只能得到位于堆上的实例,而得不到位于栈上的实例。
class SealedClass1 {
public:
static SealedClass1* GetInstance(){
return new SealedClass1();
}
static void DeleteInstance(SealedClass1* pInstance){
delete pInstance;
}
private:
SealedClass1() {}
~SealedClass1() {}
};
方法2:利用虚拟继承。
template <typename T> class MakeSealed{
friend T;
private:
MakeSealed() {}
~MakeSealed() {}
};
class SealedClass2 : virtual public MakeSealed<SealedClass2>{
public:
SealedClass2() {}
~SealedClass2() {}
}