如何创建一个不能被继承的类
来源:互联网 发布:大数据技术体系建设 编辑:程序博客网 时间:2024/05/22 03:33
在JAVA中,有final关键字;在C#中,有sealed关键字表明这个类不能被继承。但是C++中没有这个关键字,所以想达到这样的目的还是得费点功夫。
先看程序吧:
class Uninheritable {friend Base;private:Uninheritable(){}};class Base:public Uninheritable{};class Drived:public Base{};
Base的构造函数需要调用Uninheritable的构造函数。虽然Uninheritable的构造函数为private,没有被继承;但是因为Base是它的友元,所以可以访问。从Base继承下来的Drived已经不是Uninheritable的友元了,他的构造函数需要访问Base的构造函数,Base的构造函数是可以访问Uninheritable的
,所以它也可以被继承。
但是只要让Drived的构造函数直接调用Uninheritable的构造函数,就能解决这个问题了,于是我们想到了虚继承。虚继承以后,派生类会从顶向下一级一级调用构造函数,所以Drived的构造函数会直接调用Uninheritable的构造函数,从而导致失败:
class Base:virtual public Uninheritable{};class Drived:public Base{};
然后把上面的类改写成模板类:
//声明template<typename T>class Base;template<typename T>class Uninheritable{friend Base<T>;private:Uninheritable(){}};template<typename T>class Base:virtual public Uninheritable<T>{};template<typename T>class Drived:public Base<T>{};
- 如何创建一个不能被继承的类
- C++ 创建一个不能被继承的类
- c++如何生成一个不能被继承的类
- 如何定义一个不能被继承的类
- c++中如何实现一个不能被继承的类
- 如何定义一个不能被继承的类
- 如何让一个类不能被继承
- 由创建一个不能被继承的类引发的对象模型的思考
- 设计一个不能被继承的类
- 设计一个不能被继承的类
- 设计一个不能被继承的类
- 设计一个不能被继承的类
- 设计一个不能被继承的类
- 设计一个不能被继承的类
- 设计一个不能被继承的类
- 写出一个不能被继承的类
- 定义一个不能被继承的类
- 设计一个不能被继承的类
- 内存泄露检查工具BoundsChecker的使用
- Ext+Struts2.0实现文件下载
- use cvThreshold in three channel and truncate values above 100
- oracle NET学习(1):NET-8和监听器行为分析
- Linux批量删除文件命令
- 如何创建一个不能被继承的类
- php函数拾遗——一些不太常用但很牛逼的函数汇总
- 英语练习Where's Chen from
- 不公平的社会
- android opencv 人脸检测实现
- 图像处理中消除相机透镜畸变和视角变换
- 搭建了一个mini2440开发板u-boot的框架(2)
- OCP-043 report need backup days 3
- AjaxControlToolkit实现级联