设置一个不能被继承的类

news/2024/5/2 20:32:57/文章来源:https://blog.csdn.net/weixin_51609435/article/details/128069400

小屋杂谈,记录日常

方法1:

如果想让这个类不能被继承,可以把这个类的构造函数设置成私有,这样子类去继承他构造就会报错,这样的话这个类就是不能被继承的,如果需要用这个类的对象的话,在基类里写个静态函数,内部实现new个对象,返回他的指针就行

(不推荐!)只能局限在堆上去构建这个对象,在栈上不行

代码示例

方法2:

(推荐回答的版本!)

想让这个类不能被继承,我们可以让这个类去虚继承一个父类(这个父类可以是任意的一个辅助的类),这个辅助的父类构造函数设置成private,然后让这个类去作为辅助父类的友元

这个时候你让一个子类去继承刚刚完成的这个类,用子类去构建对象就会失败了。因此说这个类是不能被继承的

讲一下依据:

  1. 派生类不能去调用父类的private属性的构造函数
  2. 建立一个对象时,如果这个对象中含有从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。
  3. 意思就是辅助类A的构造为私有,B虚继承A类,且B是A的友元,友元的话B就可以访问A的私有属性,因此B去栈上或者堆上去构建自己的对象都是可以的;而因为友元不能被继承下去,所以C类去继承B的时候,这个友元没有被继承下去,C类并不是A的友元,又因为B类是虚继承A类的,所以C在构建对象的时候直接跳到A类去调用A类的构造,因为A类的构造是私有属性,所以C构建对象就会失败。
  4. 这样的爷->父->子,一串就说明了父亲这个类是不能被继承的,要是被继承了,儿子就没法去构建对象了

代码模板:

template<typename T>
class A 
{friend T;//注意这里不需要class关键字  B是A的友元
private:A() {}~A(){}};
class B :virtual public A<B>//虚继承A
{
public:B(){}~B(){}
};
class C:public B
{};int main()
{B b;//栈上B *bb = new B();//堆上C c;//出错了就会 // 基类构造函数私有,不可以被继承。因此不可以创建栈上对象
}

 不理解虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的戳下面

 虚基类及其派生类的构造函数_

方法3:

c++11引入关键字final用来标识虚函数不能在子类中被覆盖(override),或一个类不能被继承

class A final
{
private:A() {}
};
class B :public A
{};


class A 
{
public:A() {}virtual void fun()final{cout << "A fun" << endl;}
};
class B :public A
{
public:void fun() {cout << "B fun" << endl;}
};


看完上面的就能回答下面这个问题了

如何实例化构造函数是private属性的类?
只要有一个函数能够访问private成员就行了。这个就有两种方法。
一是,在类中定义一个static 成员函数。
二是,在类中定义一个friend成员。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_37946.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设备安装CoreELEC系统,并配置遥控

目录0. 前言CoreELEC简介动机硬件1.准备工作1.1下载镜像1.2 制作启动U盘2.安装CoreELEC2.1 从U盘启动2.2 CoreELEC写入盒子emmc3.设置遥控器本文原首发于zdm&#xff0c;由于该平台审核机制出现问题且编辑器极其不好用&#xff0c;所以发布于此 仅作为记录操作的用途 0. 前言 …

时间工具类-- LocalDateTimeUtil详解

LocalDateTimeUtil 对时间进行操作的时候&#xff0c;使用LocalDateTimeUtil工具类可以大大提高使用的效率&#xff0c;具体的方法可以看下图&#xff1a; 具体的使用方法都在图中说明&#xff0c;主要是方便LocalDataTime的使用及操作 LocalDataTime的基本用法 基本用法 /…

00_linux_最简单构建字符设备 2.4版本之前使用

背景:怎么构建一个最简单的字符设备驱动并且可以使用app进行操作 名称大致意思设备proc/devices/设备名称 简单来说 insmode出来的设备节点/dev/xxx 对这个设备进行操作的文件 mknode使用主次设备号对设备关联 大致方法 1.写驱动文件(file_operation),构造对应的read write 函…

叠氮荧光染料:Azide-FL-BDP|1379771-95-5|BDP FL N3叠氮

BDP FL叠氮化物是一种类似于BODIPY FL叠氮化物的荧光染料&#xff0c;是一种具有点击化学性质的荧光染料。该荧光团是硼二吡咯甲基类荧光染料的代表&#xff0c;在水环境中具有较高的量子产率。azide系列产品包括可用于进一步连接的azide-acid&#xff1b;azide-amine&#xff…

Faster R-CNN详解

Faster R-CNN Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。使用VGG16作为网络的backbone&#xff0c;推理速度在GPU上达到5fps(包括候选区域的生成)&#xff0c;准确率也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。 Faster R-CNN算…

使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【电源专题】案例:不导这颗MOS管的原因是在电路上不通用?

本案例发生在MOS管替代料导入时。正常情况下在替代料导入、部品导入的时候,我们需要查看规格书。怎么查找规格书可以看文章【电子通识】芯片资料查询方法 对于一些关键的信息我们要做对比,一般来说要通过列表进行对比。但因为不同的供应商的测试标准不同,有很多是很难对比的…

浅析数据仓库和建模理论

第一章 认识数据仓库 1.1 数据仓库概念 数据仓库&#xff0c;英文名称为 Data Warehouse&#xff0c;可简写为 DW 或 DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决…

第41讲:MySQL内置的QL性能分析工具

文章目录1.SQL性能分析的概念2.分析数据库中SQL的执行频率3.数据库中的慢查询日志3.1.开启慢查询日志功能3.2.模拟慢SQL查询观察日志内容4.Profile查看SQL每个阶段的耗时4.1.开启Profile操作4.2.随便执行一些查询语句4.3.查询执行SQL的耗时4.4.查询某一条SQL每个阶段的耗时4.5.…

Java项目:jsp+servlet实现的新闻发布系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff1b; 前台主要功能为&#xff1a; 首页、娱乐新闻、经济新闻、文化新闻、小道新闻、用户评价等&#xff1b; 后台主要…

目标检测论文解读复现之二十:基于改进Yolov5的地铁隧道附属设施与衬砌表观病害检测方法

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

ipv6地址概述——配置ipv6

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…

TMS Echo数据复制的Delphi框架

TMS Echo数据复制的Delphi框架 TMS Echo是用于数据复制的Delphi框架。它是TMS Business产品阵容的一部分&#xff0c;它取决于TMS Aurelius的运营。 TMS Echo允许您至少拥有两个数据库并在它们之间同步信息。您对单个客户数据库所做的更改(插入、更新、删除)可能会传输到其他数…

jenkins关联github

将Jenkins和github关联起来&#xff0c;实现自动化集成 GitHub侧 1、生成secret.txt secret在github上被称为token 进去GitHub --> Settings --> Developer settings --> Personal access tokens -> Generate new token创建一个新的token,勾选两处标红的地方 点…

COLMAP生成MVSNet数据集

一. colmap2mvsnet.py COLMAP可以给图像数据集标定一套相机外参及视图选择。如果想用COLMAP导出的结果输入MVSNet测试&#xff0c;需要把数据集&#xff08;图片、相机参数等&#xff09;转化为MVSNet的输入格式。MVSNet的作者yaoyao在Github上提供了colmap2mvsnet.py代码&…

Jsoup爬虫入门实战

一、Jsoup介绍 jsoup 是一款基于 Java 的HTML解析器&#xff0c;它提供了一套非常省力的API&#xff0c;不但能直接解析某个URL地址、HTML文本内容&#xff0c;而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据&#xff0c;所以 jsoup 也可以被当做爬虫工具使用。 相关…

Nuxt 3.0.0正式发布,集成Element Plus、Ant Design Vue和Arco Design Vue脚手架

发布说明 Nuxt 是使用简便的 Web 框架&#xff0c;用于构建现代和高性能的 Web 应用&#xff0c;可以部署在任何运行 JavaScript 的平台上。 Nuxt 3.0 11天前正式发布了稳定版&#xff0c;3.0 基于 Vue 3&#xff0c;为 TypeScript 提供了 “一等公民” 支持&#xff0c;并进行…

汽车销量数据库(分车型、分品牌月度销量数据 2005-2021)

1、数据来源&#xff1a;汽车工业协会 2、时间跨度&#xff1a;2005年1月-2021年5月 3、区域范围&#xff1a;全国 4、指标说明&#xff1a; 该份数据包含全国各种汽车销量数十个相关指标&#xff01; 该份数据包含如下指标&#xff1a; 轿车&#xff1a;一汽大众、上海大…

steam搬砖项目月入过万靠谱吗

大家好&#xff0c;我是阿阳 什么是国外steam游戏装备汇率差项目 一、项目介绍 其实&#xff0c;Steam就是一个美国的游戏平台&#xff0c;搬砖主要是搬的一款火遍全球的游戏CSGO的装备和饰品。CS听说过吧&#xff0c;这款游戏就是CS的一个系列。&#xff08;通俗易懂的理解就…

2023年天津财经大学珠江学院专升本管理学原理专业考试大纲

天津财经大学珠江学院2023年高职升本科专业课考试《管理学原理》考试大纲一、本大纲系天津财经大学珠江学院2023年高职升本科《管理学原理》课程考试大纲。所列考试范围出自徐碧琳主编的教材《管理学原理&#xff08;第二版&#xff09;》&#xff0c;机械工业出版社&#xff0…