怎样防止C++中的类继承?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

最近,我的一个朋友问我如何防止C++中的类继承。

三个答案。不知道哪一个是最好的。

1)私人建筑

class CBase
{

public:

 static CBase* CreateInstance() 
 { 
  CBase* b1 = new CBase();
  return b1;
 }

private:

 CBase() { }
 CBase(CBase3) { }
 CBase& operator=(CBase&) { }


};

2)使用CSealed基类、私有ctor和虚拟继承

class CSealed
{

private:

 CSealed() {
 }

 friend class CBase;
};


class CBase : virtual CSealed
{

public:

 CBase() {
 }

};

3)使用CSealed基类、受保护的ctor和虚拟继承

class CSealed
{

protected:

 CSealed() {
 }

};

class CBase : virtual CSealed
{

public:

 CBase() {
 }

};

以上所有方法都确保CBase类不能进一步继承。我的问题是:

1)哪种方法是最好的?还有其他方法吗?

2)方法2和方法3除非CSeared类被严格继承,否则无法工作。那是为什么?这和vdisp PTR有关系吗?

提问于
用户回答回答于
//Note: this class is not designed to be extended. (Hence the non-virtual dtor)
struct DontExtened
{
  DontExtened();
  /*NOT VIRTUAL*/
  ~DontExtened();
  ...
};
用户回答回答于

从C++11开始,您可以向类添加最后一个关键字,例如

class CBase final
{
...

扫码关注云+社区

领取腾讯云代金券