要求是该类不能被继承,但是能够像正常的类一样使用。那么一下方法就不符合题目要求:

1、构造函数和析构函数设置为private。这样就不能定义一个类的实例

2、类似于singleton模式那样,定义一个静态函数(或友元函数)来生成类的实例。这样只能通过new在堆上创建类

可以如下设计这个类

class Base
{
private:Base() {}~Base() {}friend class FinalClass;
};class FinalClass : virtual public Base
{
};int  main()
{FinalClass  *p = new FinalClass;  //堆上对象FinalClass  fs;                 //栈上对象
}

(1)FinalClass 是Base的友元,因此FinalClass可以访问Base中设置为private的构造函数和析构函数,因此FinalClass可以被构造                                                本文地址

(2)如果有某个类X尝试去继承FinalClass,那么X在构造的时候必须要构造Base,并且由于是FinalClass是虚拟继承自Base,X不能通过FinalClass的构造函数来构造Base,它必须直接构造Base,但是由于Base的构造函数是private的,所以X不能被构造

在c++11中引入了关键字final,可以更简单的实现,这样FinalClass就不能被继承了

class FinalClass final
    {
    };

【版权声明】转载请注明出处:http://www.cnblogs.com/TenosDoIt/p/3641943.html

转载于:https://www.cnblogs.com/TenosDoIt/p/3641943.html

c++设计一个无法被继承的类相关推荐

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

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

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

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

  3. 用C++设计一个不能被继承的类

    在C#中定义了关键字sealed,被sealed修饰的类不能被继承.在Java中同样也有关键字final表示一个类型不能被继承.在C++中没有类似于sealed和final的关键字,所以我们只有自己来 ...

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

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

  5. Java黑皮书课后题第10章:***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序。设计一个名为Tax类,该类包含下面的实例数据域

    ***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序.设计一个名为Tax类,该类包含下面的实例数据域 题目 程序解释 代码 Test8.java Test8_Tax.jav ...

  6. 【设计一个抽象的形状类Shape,方法:求周长和求面积】

    [设计一个抽象的形状类Shape,方法:求周长和求面积.shape类的子类:Rect(矩形),Circle(圆形).Rect类的子类:Square(正方形)不同的子类会有不同的计算周长和面积的方法.] ...

  7. 设计一个学校在册人员类(Person)。数据成员包括身份证号(IdPerson)、姓名(Name)、性别(Sex)、生日(Birth-day)和家庭住址(HomeAddress)。成员函数包括人员信息

    在1设计一个学校在册人员类(Person).数据成员包括身份证号(IdPerson).姓名(Name).性别(Sex).生日(Birth-day)和家庭住址(HomeAddress).成员函数包括人员 ...

  8. 设计一个银行帐户类,成员变量包括账号、储户姓名、开户时间、身份证号码、存款余额等帐户信息,成员方法包括存款、取款操作

    设计一个银行帐户类,成员变量包括账号.储户姓名.开户时间.身份证号码.存款余额等帐户信息,成员方法包括存款.取款操作 思路:首先创建一个BankAccount类用于存放用户信息,在创建一个BCOpti ...

  9. 设计一个表示学生的类:Student,该类的属性包括name、age、scores(包含语文、数学和英语三科成绩,每科成绩的类型为整数),此外该类还有3个方法。

    设计一个表示学生的类:Student,该类的属性包括name.age.scores(包含语文.数学和英语三科成绩,每科成绩的类型为整数),此外该类还有3个方法. (1)获取学生姓名的方法:get_na ...

  10. MATLAB 设计一个学生管理系统(类与对象)

    设计一个简单的学生成绩管理程序,包含如下功能: 1.可创建不少于100名学生成员: 2.每名成员的记录包括:学号.姓名.专业和5门课程的成绩:  3.能够实现添加.删除.修改学生成员: 4.能够实现添 ...

最新文章

  1. mysql dml ddldcl权限_MySQL中的DML、DDL、DCL到底是什么呢?
  2. Style Intelligence 10特点之用户自定义报表
  3. (4)关于Alpha通道问题
  4. linux 找不到动态链接库 .so文件的解决方法
  5. 在eclipse中创建web项目(非myeclipse)
  6. jQuery easyUI--下拉菜单的制作
  7. java 范围搜寻要怎么弄_搜索范围
  8. xp正版验证补丁_实操web漏洞验证——IIS HTTP.sys 整数溢出漏洞
  9. 高性能分页REST API查询生成器
  10. layui option 动态添加_layuiselect如何动态添加option
  11. 现在这个时代变了,区块链,数字货币才是最火的项目
  12. html微软雅黑字体模糊,如何解决WinXP下微软雅黑字体不清晰的问题
  13. 云服务器ubuntu建网站,云服务器ubuntu建网站
  14. 1653 藏头诗
  15. 卖二手车及过户的小经验
  16. 高速信号编码之8B/10B
  17. 本地的项目上传到 Git 仓库的步骤-超详细
  18. python编程剪刀石头布思路_Python制作简单的剪刀石头布游戏
  19. 面向对象(封装,this,static,代码块)
  20. tensorflow踩坑

热门文章

  1. 列文伯格-马夸尔特拟合算法(Levenberg Marquardt Fitting)的C#实现
  2. Windows 2003中如何启动IIS6的GZIP压缩网页传输(补充)
  3. AudFree Tidable Music Converter for Mac - 音乐格式转换软件
  4. 如何在 Mac 上使用预览将 .pdf 文件更改为 .jpg 文件
  5. (日常搬砖)数据集标注格式转换:txt转xml(VOC格式)
  6. cost of path 的计算
  7. 查看centos操作系统、java_jdk、hadoop位数
  8. mysql_数据查询_单表查询
  9. android系统文件的权限
  10. [转]MySQL游标特性