C++中没有自己定义这样一个类,需要自己实现。

(1)将构造函数设为私有

不能被继承,则可以将构造函数和析构函数定义为private,这样有个问题,我们也不能新建一个此类的变量。

可以使用static来新建和释放内存。如下示例:

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

(2)使用虚拟继承和友元

将一个类A的构造析构函数定义为private;

定义子类B是A的友元;

子类B虚拟继承(virtual public)A;

这样定义的效果是可以创建B的实例但是不能被继承,如果被子类C继承,则C会跳过B自己来创建A,而C不能访问A的构造和析构函数;

如果不采用虚拟继承,public时,C类会构造B,B类来创建A,此时B是可以被继承的。

class SealedClass1;
class MakeSealed1
{friend SealedClass1;private:MakeSealed1() {}~MakeSealed1() {}
};class SealedClass1 : virtual public MakeSealed1
{
public:SealedClass1() {}~SealedClass1() {}
};

也可以采用模板的方式如下:

template <typename T> class MakeSealed
{friend T;private:MakeSealed() {}~MakeSealed() {}
};class SealedClass2 : virtual public MakeSealed<SealedClass2>
{
public:SealedClass2() {}~SealedClass2() {}
};

用C++实现不能被继承的类相关推荐

  1. c++设计一个不能被继承的类

    摘要:使用友元.私有构造函数.虚继承等方式可以使一个类不能被继承,可是为什么必须是虚继承?背后的原理又是什么? 用C++实现一个不能被继承的类(例1) 1 #include <iostream& ...

  2. 【100题】第五十九题 用C++编写不能被继承的类

    一,题目 用C++设计一个不能被继承的类. 二,分析 在Java中定义了关键字final,被final修饰的类不能被继承.但在C++中没有final这个关键字. 首先想到的是在C++ 中,子类的构造函 ...

  3. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  4. 由创建一个不能被继承的类引发的对象模型的思考

    昨天吃饭和宽妹讨论起以前看过的如何创建一个不能被继承的类,具体实现见 http://blog.csdn.net/kuaile123/article/details/21321471 同学提到了第一种方 ...

  5. 程序员面试题精选100题(32)-不能被继承的类[C/C++/C#]

    题目:用C++设计一个不能被继承的类. 分析:这是Adobe公司2007年校园招聘的最新笔试题.这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目. 在Java中定义了关键字f ...

  6. Cpp 对象模型探索 / 不能被继承的类

    两种方法 C++ 11 final 关键字 友元类 + 虚继承. 栗子 class A { private:A() {}friend class B; }; class B : virtual pub ...

  7. C++ 中不能被继承的类实现,及从中体现virtual 继承的一个特性

    C++ view第一期中给出了如何实现一个不能被继承的类的方法. 如下: #ifdef NDEBUG #define FINAL_CLASS #else #define FINAL_CLASS : p ...

  8. [剑指offer]面试题48:不能被继承的类

    面试题48:不能被继承的类 题目:用C++设计一个不能被继承的类. ❖ 常规的解法:把构造函数设为私有函数 很多人都能够想到,在 C++中子类的构造函数会自动调用父类的构造函数,子类的析构函数也会自动 ...

  9. [C++基础]037_编写不可被继承的类

    1. 現実场景 在很多电影电视剧里,武功最高的往往是太监,所谓"欲练此功,必先自宫",太监的武功为什么会这么高?我想应该是闲的.如果说面向对象的世界里有父子的话,那么太监这个类应该 ...

  10. 【剑指 offer】(48)—— 不能被继承的类

    题目:请用 C++ 设计不能被继承的类.

最新文章

  1. CodeForces 157C Message
  2. C++(四)——类和对象(下)
  3. java 文件指定位置插入_java中想在一个文件中的某一个位置插入内容,如何操作?...
  4. ndows live id怎么登陆,手机如何注册和使用Windows Live ID帐号
  5. jboss入门_JBoss Forge NetBeans集成–入门
  6. Linux之环境变量
  7. Spark入门-了解Spark核心概念
  8. Goods:查询某个用户的购物车条目以及添加购物车条目
  9. java多线程实现卖票小程序
  10. PDF文件怎么转换成Excel表格?学会这个方法轻松转换。
  11. 【机械】如何用SOLIDWORKS进行ArtCam雕刻机排版
  12. 【读书笔记】《认知语义学》序言
  13. Scrapy框架-阳光政务平台爬虫(二)
  14. 实战中,利用10日均线捕捉主升浪,必须满足这四个条件!
  15. A Death in the Family May Cause Real Heart Break
  16. 【PHP攻城狮】【前端面试】【Vue.2x】【黑苹果】【创造力】| Chat · 预告
  17. iphone相册源码下载(仿three20)
  18. PPT2010中,如何让带圈的序号填充背景颜色?
  19. PPT在线转换成视频的步骤
  20. 传统C/S软件的断骨增高

热门文章

  1. Python编程基础:第六节 math包的基础使用Math Functions
  2. Getting started with Apache Camel--转载
  3. Java 异常处理的误区和经验总结--转载
  4. 深入分析 Linux 内核链表--转
  5. funny alphabet
  6. 机器学习算法加强——聚类
  7. 你知道你的模型可以为公司赚多少钱吗
  8. 【采用】人工智能如何帮助银行反欺诈:银行智能欺诈风险预测模型研究
  9. xieshiran:使用 R 语言开发评分卡模型
  10. 马明哲新年内部讲话透露新战略:全面开启3.0时代