面试题48:用C++设计一个不能被继承的类

解法一:把构造函数设为私有

  将构造函数定义为私有,然后通过定义公有的静态函数来创建和释放类的实例。

 1 class SealedClass 1

 2 {

 3   public:

 4     static SealedClass1* GetInstance()

 5     {

 6        return new SealedClass1();

 7     }

 8     static void DeleteInstance( SealedClass1* pInstance)

 9     {

10       delete pInstance;

11     }

12   private:

13     SealedClass1();

14     ~SealedClass1(){}

15 }

缺点:只能得到位于堆上的实例,得不到位于栈上的实例。

解法二:利用虚拟继承

class MakeSealed

{

  friend SealedClass2;

private:

  MakeSealed();

  ~MakeSealed();

};



class SealedClass2:virtual public MakeSealed

{

  public:

  SealedClass2(){}

  ~SealedClass2(){}

};

  SealedClass2是不能被继承的类。当一个类试图继承它时,在调用该类的构造函数时会直接跳过SealedClass2而直接调用MakeSealed的构造函数,因此会出现编译错误。

 

你可能感兴趣的:(C++)