您的位置:首页 > 编程语言 > C语言/C++

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

2015-06-25 17:18 169 查看
解法一:把构造函数设为私有

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

class SealedClass 1
{
  public:
    static SealedClass1* GetInstance()
    {
       return new SealedClass1();
    }
    static void DeleteInstance( SealedClass1* pInstance)
    {
      delete pInstance;
    }
  private:
    SealedClass1();
    ~SealedClass1(){}
}


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

解法二:利用虚拟继承

class MakeSealed
{
  friend SealedClass2;
private:
  MakeSealed();
  ~MakeSealed();
};

class SealedClass2:virtual public MakeSealed
{
  public:
  SealedClass2(){}
  ~SealedClass2(){}
};


  SealedClass2是不能被继承的类。当一个类试图继承它时,在调用该类的构造函数时会直接跳过SealedClass2而直接调用MakeSealed的构造函数,因此会出现编译错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: