c++类的静态变量、静态函数 笔记

news2025/1/12 22:50:58

正文:

1、看下面这个是一个常规的类

#include <iostream>
#include <windows.h>
using namespace std;
class BOX{
    int callsNum=1;
    public:
        BOX(){
            callsNum++;
        };
        int fun(){
            return callsNum;
        };
};
// int BOX::callsNum=1;

// 程序的主函数
int main()
{
    SetConsoleOutputCP(65001);
    BOX a;
    BOX b;
    cout<<a.fun()<<endl;
    cout<<b.fun()<<endl;
}

每次a.fun和b.fun的输出结果都是一样的。

        但是我现在要知道这个类被申明了多少次,也就是callsNum在每次BOX a,BOX b时都要进行加一操作,累积结果。这时候就要用到static

直接static 会报错的,这也就意味着 static定义的变量要在class外以 类名::变量名 的形式来赋值写法如下

#include <iostream>
#include <windows.h>
using namespace std;
class BOX{
    string a="-----\n";
    static int callsNum;
    public:
        BOX(){
            callsNum++;
        };
        int fun(){
            cout <<a;
            return callsNum;
        };
};
int BOX::callsNum=1;

// 程序的主函数
int main()
{
    SetConsoleOutputCP(65001);
    BOX a;
    cout<<a.fun()<<endl;
    BOX b;
    cout<<b.fun()<<endl;
    cout<<a.fun()<<endl;
}

我们理下3次值的输出

1、第一次值是2,是因为BOX a的时候构造函数执行了callsNum++

2、第二次值是3,是因为BOX b的时候构造函数执行了callsNum++

3、第二次值是3,是因为a和b共享了类的静态变量callsNum,所以a.fun的时候输出callsNum的值也变成了3,

好,这个是类静态变量,为什么用静态函数,和类普通函数有什么区别往下看

静态函数

        1、静态成员函数只能访问静态成员函数

        2、静态成员函数没有this

#include <iostream>
#include <windows.h>
using namespace std;
class BOX{
    public:
        static int callsNum;
        BOX(){
            callsNum++;
        };
        static int fun(){
            return callsNum;
        };
};
int BOX::callsNum=1;
// 程序的主函数
int main()
{
    SetConsoleOutputCP(65001);
    // BOX a;//调用静态函数不需要
    // cout<<a.fun()<<endl;
    cout<< BOX::fun()<<endl;
}

 类静态函数的优点就是你不需要生成类对象,也就是不需要  BOX a;这一步。有些场景只需要这个类的某个函数。当然,如果直接就BOX a的话也就说他不进入构造函数!!!!!!,也就没有callsNum++;的动作,一般工具类用的比较多,也就是通用的类。

类静态函数成员内没有this->所以你不能直接this->不然就会报下面错误 

正确的代码如下

#include <iostream>
#include <windows.h>
using namespace std;
class BOX{
    public:
        int bb=1;
        static int callsNum;
        BOX(){
            callsNum++;
        };
        void funxx(){
            cout<< "静态函数调用了类非静态函数funxx()"<<endl;
        };
        static int fun(BOX a){
            a.funxx();
            cout<< "静态函数调用了类非静态变量bb="<<a.bb<<endl;
            return callsNum;
        };
};
int BOX::callsNum=1;
// 程序的主函数
int main()
{
    SetConsoleOutputCP(65001);
    BOX a;
    cout << a.fun(a)<< endl;
}

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

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

相关文章

【某区护网】从外网打点到拿下域控

目录 web打点 反弹shell与权限维持 主机信息收集与反向代理 攻击域控 前端时间刚结束了攻防演练活动&#xff0c;其中一项成果为拿下某集团域控制器权限&#xff0c;直接控制域内主机5000多台。以下为攻击过程的粗略记录&#xff0c;整体来说还是比较容易。 web打点 接到…

N1Book-第一章Web入门-任意文件读取漏洞-afr_2

本题为Nu1L团队编著的《从0到1&#xff1a;CTFer成长之路》配套题目。来源网站&#xff1a;https://book.nu1l.com/ 经过多方查阅资料&#xff0c;发现题目是&#xff0c;由于Nginx配置不当产生了目录穿越漏洞。本题使用的是OpenResty&#xff0c;而OpenResty是基于Nginx与Lua实…

门诊自助打印机可以办理哪些业务呢?

自助打印机可以办理以下业务&#xff1a; 检验报告单打印&#xff1a;患者可以通过医院验单自助打印机自主打印检验报告单&#xff0c;避免了等待时间&#xff0c;提高了医院的服务效率&#xff1b;检验报告查询&#xff1a;患者可以通过医院验单自助打印机查询自己的检验报告…

HHDBCS便捷功能简介

1. 连接管理 使用数据库时&#xff0c;不可避免的要建立很多个连接。 如果单纯用命令执行切换用户的话&#xff0c;实在是一件麻烦事。 那么这种麻烦事就交给HHDECS好了。 点击连接管理&#xff0c;一键切换。 而且能在不同数据库之间随意切换 2. 使用高级模式&#xff…

Linux环境安装iperf3(网络性能测试工具)

[rootlocalhost ]# yum search iperf 已加载插件&#xff1a;fastestmirror Loading mirror speeds from cached hostfile* base: mirrors.tuna.tsinghua.edu.cn* extras: mirrors.huaweicloud.com* updates: mirrors.tuna.tsinghua.edu.cnN/S matched: iperf iperf3-devel.i6…

数据分析示例-python

数据分析示例-python 今天呢&#xff0c;博主把之前做过的一个小课题拿出来展示一下&#xff0c;当然这个课题呢做的工作量很大&#xff0c;也用到了很多可以参考的技术和代码&#xff0c;做数据分析工作的可以尝试学习学习。 这篇博客&#xff0c;我们先从数据集开始介绍。 对…

GSAP - 一款基于 JavaScript 的 web 动画库,简单几行代码就能写出丝滑流畅、高性能的动画效果

使用简单&#xff0c;但做出来的动画非常丝滑&#xff0c;也能实现很多专业的动画效果&#xff0c;推荐给大家。 关于 GSAP GSAP 的全名是 GreenSock Animation Platform&#xff0c;项目诞生非常早&#xff0c;远在 flash 繁荣的时代就存在&#xff0c;一直发展到今天已经是…

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测

区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRBiGRU双向门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 进阶版 基础版 基本介绍 MATLAB实现QRBiGRU双向门控循环单…

时间序列预测(二)基于LSTM的销售额预测

时间序列预测&#xff08;二&#xff09;基于LSTM的销售额预测 小O&#xff1a;小H&#xff0c;Prophet只根据时间趋势去预测&#xff0c;会不会不太准啊 小H&#xff1a;你这了解的还挺全面&#xff0c;确实&#xff0c;销售额虽然很大程度依赖于时间趋势&#xff0c;但也会和…

YOLOv5教程-如何使用他人的数据集进行训练+测试评估模型

目录 一、前言与数据集 二、划分数据集以及配置文件的修改 1.把图片和.txt标注文件放入对应VOCData文件夹下 2..txt文件转为.xml文件 3.在VOCData目录下创建程序 split_train_val.py 并运行 4.将xml格式转为yolo_txt格式 5.设置测试文件 6.配置文件 三、聚类获得先验框 …

ABeam×StartUp | ABeam旗下艾宾信息技术开发(大连)与大连金勺科技展开合作交流

近日&#xff0c;ABeam 大中华区董事长兼总经理中野洋辅先生及艾宾信息技术开发&#xff08;大连&#xff09;&#xff08;以下简称“ABeam-TDC”&#xff09;的资深顾问团队一行人拜访了大连金勺科技有限公司&#xff08;以下简称“金勺科技”&#xff09;。 双方就各自发展的…

jsjiami.v6加密逆向分析介绍

随着互联网的不断发展&#xff0c;网站的安全性越来越受到重视。JS混淆加密技术是一种常用的保护网站安全的手段。jsjiami.v6是一款常用的JS混淆加密工具&#xff0c;下面我们来详细了解一下。 首先&#xff0c;我们来看一下一个使用jsjiami.v6进行混淆加密的案例代码&#xf…

线上 FullGC 问题排查实践 —— 手把手教你排查线上问题

一、问题发现与排查 1.1 找到问题原因 问题起因是我们收到了 jdos 的容器 CPU 告警&#xff0c;CPU 使用率已经达到 104% 观察该机器日志发现&#xff0c;此时有很多线程在执行跑批任务。正常来说&#xff0c;跑批任务是低 CPU 高内存型&#xff0c;所以此时考虑是 FullGC 引…

LC-1263. 推箱子(网格图BFS + DFS)

1263. 推箱子 难度困难105 「推箱子」是一款风靡全球的益智小游戏&#xff0c;玩家需要将箱子推到仓库中的目标位置。 游戏地图用大小为 m x n 的网格 grid 表示&#xff0c;其中每个元素可以是墙、地板或者是箱子。 现在你将作为玩家参与游戏&#xff0c;按规则将箱子 B 移…

Sleuth和zipkin

1、Sleuth是什么 为什么会出现这个技术&#xff1f;要解决哪些问题&#xff1f; 在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果&#xff0c;每一个前段请求都会形成一条复杂的分布式服务调用链路&am…

2.RabbitMQ

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&am…

查询文件路径

1 问题 如何利用Java来查询文件的路径&#xff1f; 2 方法 1首先在类中利用main函数调用所有文件的和目录的代码。 2 然后开始写查询展示所有文件和目录的方法&#xff08;运用了递归的思想&#xff09; import java.io.File;import java.util.Arrays;import java.util.Scanner…

ETO、MTO、ATO与MTS(按单设计、按单生产、按单装配和库存生产)

按照企业组织生产的特点&#xff0c;可以把制造企业划分为ETO、ATO、MTO与MTS&#xff08;按单设计、按单装配、按单生产和库存生产&#xff09;四种生产类型。 按单设计&#xff08;Engineer To Order&#xff0c;ETO&#xff09;   在这种生产类型下&#xff0c;一种产品在…

【Sentinel源码分析】

Sentinel源码分析 Sentinel源码分析1.Sentinel的基本概念1.1.ProcessorSlotChain1.2.Node1.3.Entry1.3.1.自定义资源1.3.2.基于注解标记资源 1.4.Context1.4.1.什么是Context1.4.2.Context的初始化1.4.2.1.自动装配1.4.2.2.AbstractSentinelInterceptor1.4.2.3.ContextUtil 2.P…

软件工具 | Python调用运筹优化求解器(一):以CVRPVRPTW为例

目录 1. 引言2. 求解器介绍3. 基础语言3.1 创建模型3.2 添加变量3.3 添加目标函数3.4 添加约束3.5 设置参数3.6 求解 4. 数学模型4.1 [CVRP数学模型](https://mp.weixin.qq.com/s/DYh-5WkrYxk1gCKo8ZjvAw)4.2 [VRPTW数学模型](https://mp.weixin.qq.com/s/tF-ayzjpZfuZvelvItue…