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

2023-12-20 11:21:56

目录

情况一:

证实方法:

结果:

情况二:

证实方法:

结果:

实战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++中为设计模式中的单例设计模式

文章来源:https://blog.csdn.net/weixin_59669309/article/details/135097323
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。