c++设计一个无法被继承的类
要求是该类不能被继承,但是能够像正常的类一样使用。那么一下方法就不符合题目要求:
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++设计一个无法被继承的类相关推荐
- 用C++ 设计一个不能被继承的类
题目:用C++ 设计一个不能被继承的类. 分析:这是Adobe 公司2007 年校园招聘的最新笔试题.这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目. 在Java 中定义 ...
- c++设计一个不能被继承的类
摘要:使用友元.私有构造函数.虚继承等方式可以使一个类不能被继承,可是为什么必须是虚继承?背后的原理又是什么? 用C++实现一个不能被继承的类(例1) 1 #include <iostream& ...
- 用C++设计一个不能被继承的类
在C#中定义了关键字sealed,被sealed修饰的类不能被继承.在Java中同样也有关键字final表示一个类型不能被继承.在C++中没有类似于sealed和final的关键字,所以我们只有自己来 ...
- 由创建一个不能被继承的类引发的对象模型的思考
昨天吃饭和宽妹讨论起以前看过的如何创建一个不能被继承的类,具体实现见 http://blog.csdn.net/kuaile123/article/details/21321471 同学提到了第一种方 ...
- Java黑皮书课后题第10章:***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序。设计一个名为Tax类,该类包含下面的实例数据域
***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序.设计一个名为Tax类,该类包含下面的实例数据域 题目 程序解释 代码 Test8.java Test8_Tax.jav ...
- 【设计一个抽象的形状类Shape,方法:求周长和求面积】
[设计一个抽象的形状类Shape,方法:求周长和求面积.shape类的子类:Rect(矩形),Circle(圆形).Rect类的子类:Square(正方形)不同的子类会有不同的计算周长和面积的方法.] ...
- 设计一个学校在册人员类(Person)。数据成员包括身份证号(IdPerson)、姓名(Name)、性别(Sex)、生日(Birth-day)和家庭住址(HomeAddress)。成员函数包括人员信息
在1设计一个学校在册人员类(Person).数据成员包括身份证号(IdPerson).姓名(Name).性别(Sex).生日(Birth-day)和家庭住址(HomeAddress).成员函数包括人员 ...
- 设计一个银行帐户类,成员变量包括账号、储户姓名、开户时间、身份证号码、存款余额等帐户信息,成员方法包括存款、取款操作
设计一个银行帐户类,成员变量包括账号.储户姓名.开户时间.身份证号码.存款余额等帐户信息,成员方法包括存款.取款操作 思路:首先创建一个BankAccount类用于存放用户信息,在创建一个BCOpti ...
- 设计一个表示学生的类:Student,该类的属性包括name、age、scores(包含语文、数学和英语三科成绩,每科成绩的类型为整数),此外该类还有3个方法。
设计一个表示学生的类:Student,该类的属性包括name.age.scores(包含语文.数学和英语三科成绩,每科成绩的类型为整数),此外该类还有3个方法. (1)获取学生姓名的方法:get_na ...
- MATLAB 设计一个学生管理系统(类与对象)
设计一个简单的学生成绩管理程序,包含如下功能: 1.可创建不少于100名学生成员: 2.每名成员的记录包括:学号.姓名.专业和5门课程的成绩: 3.能够实现添加.删除.修改学生成员: 4.能够实现添 ...
最新文章
- mysql dml ddldcl权限_MySQL中的DML、DDL、DCL到底是什么呢?
- Style Intelligence 10特点之用户自定义报表
- (4)关于Alpha通道问题
- linux 找不到动态链接库 .so文件的解决方法
- 在eclipse中创建web项目(非myeclipse)
- jQuery easyUI--下拉菜单的制作
- java 范围搜寻要怎么弄_搜索范围
- xp正版验证补丁_实操web漏洞验证——IIS HTTP.sys 整数溢出漏洞
- 高性能分页REST API查询生成器
- layui option 动态添加_layuiselect如何动态添加option
- 现在这个时代变了,区块链,数字货币才是最火的项目
- html微软雅黑字体模糊,如何解决WinXP下微软雅黑字体不清晰的问题
- 云服务器ubuntu建网站,云服务器ubuntu建网站
- 1653 藏头诗
- 卖二手车及过户的小经验
- 高速信号编码之8B/10B
- 本地的项目上传到 Git 仓库的步骤-超详细
- python编程剪刀石头布思路_Python制作简单的剪刀石头布游戏
- 面向对象(封装,this,static,代码块)
- tensorflow踩坑
热门文章
- 列文伯格-马夸尔特拟合算法(Levenberg Marquardt Fitting)的C#实现
- Windows 2003中如何启动IIS6的GZIP压缩网页传输(补充)
- AudFree Tidable Music Converter for Mac - 音乐格式转换软件
- 如何在 Mac 上使用预览将 .pdf 文件更改为 .jpg 文件
- (日常搬砖)数据集标注格式转换:txt转xml(VOC格式)
- cost of path 的计算
- 查看centos操作系统、java_jdk、hadoop位数
- mysql_数据查询_单表查询
- android系统文件的权限
- [转]MySQL游标特性