首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >防止C++中的类继承

防止C++中的类继承
EN

Stack Overflow用户
提问于 2010-02-02 20:57:37
回答 9查看 47.1K关注 0票数 69

最近,我的一个朋友问我如何在C++中防止类继承。他希望编译失败。

我正在考虑这个问题,找到了3个答案。不知道哪一个是最好的。

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. 哪种方法是最好的?还有其他可用的方法吗?

除非通过病毒继承CSealed类,否则

  1. 方法2和3将无法工作。为什么会这样呢?这和vdisp ptr有关系吗??

PS:

上述程序是在MS C++编译器(Visual Studio)中编译的。参考:http://www.codeguru.com/forum/archive/index.php/t-321146.html

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2184133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档