c++学习:static在类中的空间分配+实战+单例设计模式

目录

情况一:

证实方法:

结果:

情况二:

证实方法:

结果:

实战1:在同一个类中不同对象中传递消息

        方法一:

        方法二:

实战2:该类只用创建一次,不想调用每个函数都新建一个对象

        方法一:

        方法二:

        方法三:

                思考:

                解决方法:

                这种在c++中为设计模式中的单例设计模式


情况一:

        当A类中有一个static int NUM; 那创建不同对象,是每个对象都有一个NUM空间呢,还是共用一个NUM空间

证实方法:

  1. 创建一个类,里面public里有一个static int num;
  2. 新建两个对象,在一个对象上修改num的值
  3. 然后分别打印出两个对象的num的值

结果:

        同个类不同对象共用一个static的内存空间

情况二:

证实方法:

  1. 新建一个基类,在基类里的public里有一个static int num;
  2. 再新建一个类,继承上面的基类
  3. 将基类里的num值修改
  4. 然后分别打印出两个类的num值

结果:

        基类里有static,派生类和基类共用一个static内存空间

实战1:在同一个类中不同对象中传递消息

        设计一个销售员SelesPerson类,货品数量一共有10w台,现在招聘3个销售员,经过一个星期的销售,1号销售卖了18909台,2号卖了39876台,3号卖了40021台,输出剩余库存

        方法一:

        用一个全局变量来存储10w,然后新建一个销售类,里面有销售编号成员和一个销售函数,销售函数就会用全局变量来减去用函数传进来的销售数,在主函数中,先给全局变量赋值,再新建3个销售类,调用销售函数,函数参数传入销售数量,最终输出全局变量。

        方法二:

        在类中定义一个static成员,上面得出同个类不同成员共用一个static成员空间就可以做到对static成员修改,然后和方法一一样进行销售,最终输出static成员,(可以将static设置在private里,然后定义一个static函数来返回成员,通过类来调用static函数)

实战2:该类只用创建一次,不想调用每个函数都新建一个对象

        设计两个操作函数,一个是读文章,一个是写文章,再定义一个计算机类,计算机类有开机,关机功能,每次新建一个对象就等于开机,释放对象就等于关机,只想开一次机和关一次机

        方法一:

                将一个对象定义为全局变量,然后每个函数都可以操控,只有等程序结束时才会关机释放内存(但要创建一个全局变量)

        方法二:

                将一个对象进行传参,就可以在函数里通过传进来的参数来调用计算机类(每次要调用的时候都要加参数,麻烦)

        方法三:

                在计算机里加入一个static成员,该成员是指针,指向自己本身的指针,类型就是自己类的指针类型,然后在外面通过类来将成员设置为空,再定义一个static函数,函数里先判断static成员是否为空,为空就分配空间,返回static成员。如果不为空,也返回static成员,然后操作函数里就通过类来调用static函数,接收返回的static成员,第一次调用的时候就会申请空间,第二次的时候就不会申请空间,用的还是同一个空间

                思考:

                        通过方法三,还是可以再另外实例化对象,再次调用构造函数,有什么方法可以只调用一次构造函数

                解决方法:

                        将构造方法放到私有里面,这样子就无法再另外实例化对象了,只能通过类调用类里的static函数来申请实例化对象,从而在类的内部调用类中私有的构造函数

                这种在c++中为设计模式中的单例设计模式

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

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

相关文章

【postgresql】PSQLException: An I/O error occurred while sending to the backend.

org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend. 发送到后端时发生I/O错误。 java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 34284 尝试将超出范围的整数作为2字节值发送:34284 pos…

C++学习——访问限定符

在C中,protected, friend, 和 public 是访问限定符,用于指定类成员的访问级别。 访问限定符 public public 成员可以从类的任何地方访问,包括类的外部。这通常是你希望外部代码能够直接访问和操作的那些方法和属性。比如,一个类…

OpenHarmony开发环境快速搭建(无需命令行)

一. 搭建Windows环境 在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、H…

LLM微调(四)| 微调Llama 2实现Text-to-SQL,并使用LlamaIndex在数据库上进行推理

Llama 2是开源LLM发展的一个巨大里程碑。最大模型及其经过微调的变体位居Hugging Face Open LLM排行榜(https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard)前列。多个基准测试表明,就性能而言,它正在接近GPT-3.5…

助老理发,寒冬送暖从头开始

为进一步弘扬尊老、敬老、爱老、助老的中华民族传统美德,解决老年人年龄大、冬季出行不便的问题,2023年12月20日,绿萝志愿服务队在翠堤社区开展了“助老理发”志愿活动。 大雪过后天气格外寒冷,但志愿者们依旧早早的来现场做…

【Flink-Bug】Flink 自定义 Sink 重写 RichSinkFunction 方法时重复调用 open 的解决方案

【Flink-Bug】Flink 自定义 Sink 重写 RichSinkFunction 方法时重复调用 open 的解决方案 Flink 自定义 RichinkFunction 时可能会重写 open 方法进行某些连接的初始化操作,但是会出现重复调用 open 方法的问题,如:MQ,如果重复调用…

【Unity实现海浪盒_GerstnerWaves算法_焦散Caustics效果_案例分享】

Unity实现海浪盒效果 背景设置好顶点色参数海浪盒水体部分效果为了快速实现效果,下面用Shadergraph实现效果。ShaderGraph水体全节点ShaderGraph全节点模块序号ShaderGraph属性ShaderGraph Graph Setting1. GerstnerWave 顶点动画部分,输出的是顶点偏移和NormalOSWaves算法Ge…

扭蛋机小程序搭建,“互联网+”下的发展优势

随着我国生活水平和消费能力不断提高,人们对各种潮流文化类的产品需求也快速上升。至此,我国潮流文化市场得到了快速发展! 扭蛋机作为潮玩中的一种商业模式,深受不同年龄层用户的喜爱。并且扭蛋机的种类也是各式各样,…

MYSQL单表删除重复的数据方法

先简述遇到的问题:我要删除一张表的数据,先是查询到所有的重复的数据id直接进行删除操作,但是一直执行不完(一直执行就是删除不完) DELETE FROM table WHERE id IN ( SELECT MAX(id) id from table where rId…

P2089 烤鸡

烤鸡 题目背景 猪猪 Hanke 得到了一只鸡。 题目描述 猪猪 Hanke 特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke 吃鸡很特别,为什么特别呢?因为他有 10 10 10 种配料(芥末、孜然等&#xff…

Vue 官方周报 #124 - 使用JSDoc记录组件属性

Hi &#x1f44b; 当你将鼠标悬停在IDE中的组件上时&#xff0c;显示组件属性所对应的描述&#xff0c;这个功能在开发过程中会很有用。你可以在传递给defineProps函数的TypeScript接口中使用JSDoc来实现这一点&#xff1a; MyComponent.vue <script setup lang"ts&…

【音视频 | AAC】AAC格式音频文件解析

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

ffplay工具

在编译ffmpeg时&#xff0c;如果系统中包含了SDL库&#xff0c;则会默认编译生成ffplay工具&#xff0c;否则无法生成ffplay工具。 ffplay即可以作为播放器&#xff0c;也可以作为很多图像化音视频数据的分析工具&#xff0c;通过它可以看到视频图像的运动估计方向、音频数据的…

大创项目推荐 深度学习 植物识别算法系统

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

Python知识(1/20):变量、表达式、什么是程序?

23年是AI井喷的一年&#xff0c;我对AI的态度是恐惧的&#xff0c;以往我只需要CRUD就能需要的工作&#xff0c;AI能够编写出来&#xff0c;虽然现在还有很多缺陷&#xff0c;但是我比较喜欢向前看&#xff0c;在我未来我感觉我能遇到我被AI替代的那天。 我该怎能么办呢&#…

基于APB总线的SM4密码协处理器实现(附Verilog代码)

基于APB总线的SM4密码协处理器实现&#xff08;附Verilog代码&#xff09; 本文内容摘要理论依据和设计内容SM4分组密码算法APB_slave协处理器 测试过程与结果调试经历测试结果SM4.0部分测试APB协处理器部分测试 整体代码 本文内容摘要 本文使用Verilog语言实现SM4加密协处理器…

智能养殖解决方案:如何利用485转WiFi无线路由

随着科技的发展&#xff0c;智能养殖已经成为了一种新兴的生产方式。智能养殖不仅可以提高养殖效率和质量&#xff0c;还可以减少资源浪费和环境污染。其中&#xff0c;485转WiFi无线路由器作为智能养殖解决方案中的重要组成部分&#xff0c;发挥着关键的作用。以下将从三个方面…

多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现BiTCN-Multihea…

IP子网划分【专题突破】

1、IP地址基础 IPv4地址是32位&#xff0c;采用点分十进制方式表示&#xff0c;其次必须掌握二进制的转换。 IPv6地址是128位&#xff0c;采用冒号分隔的十六进制表示方法。 2、IP地址的分类 RFC1918规定的私有地址 A类地址范围&#xff1a;10.0.0.0-10.255.255.255(1个A类…

EasyExcel使用: RGB字体,RGB背景颜色,fillForegroundColor颜色对照表

EasyExcel使用: RGB字体&#xff0c;RGB背景颜色&#xff0c;fillForegroundColor颜色对照表 使用EasyExcel导出表格可能会对字体颜色和单元格背景颜色进行自定义的修改。 可以自定义字体颜色或者每个单元格的颜色 要想自定义颜色&#xff0c;需要重写CellWriteHandler接口&am…