C++:静态成员变量和静态成员方法

静态成员变量

C++中的静态成员变量是属于类而不是类的实例的变量。这意味着无论创建了多少个类的实例,静态成员变量都只有一个副本,并且可以被所有类的实例共享。

让我们来看一个示例:

class RolePlayer {
public://静态成员变量static int roleCount;RolePlayer(){//每次对象创建roleCount都进行自加roleCount++;std::cout << "构造函数" << std::endl;}
}

静态成员变量的初始化通常在类的实现文件(.cpp 文件)中进行。这样做确保只有一个实例存在,并且可以在类的范围内进行定义和初始化。以下是一种常见的静态成员变量初始化方法:

//静态成员变量初始化
int RolePlayer::roleCount = 0;
​
int main() {RolePlayer roleA;RolePlayer roleB;RolePlayer roleC;std::cout << RolePlayer::roleCount << std::endl;system("pause");return 0;
}

在main函数中创建了三个对象:roleAroleBroleC;这个时候打印静态成员变量的值得到结果:

在这个示例中,RolePlayer::roleCount 是一个静态成员变量,因此它属于整个类而不是类的实例。在类的定义之外,我们对 RolePlayer::roleCount 进行了初始化,并将其设置为 0。

在每个 RolePlayer 对象被创建时,构造函数会自增 RolePlayer::roleCount 的值。最后,我们输出 RolePlayer::roleCount 的值,以查看对象的创建次数。

静态方法

静态成员方法也是属于类而不是类的实例的方法。与静态成员变量类似,静态成员方法可以通过类名直接调用,而不需要创建类的实例。

声明和定义静态成员方法

静态成员方法的声明和定义方式与普通成员方法类似,但在声明和定义时需要在前面加上 static 关键字。例如:

class RolePlayer {
public://静态成员变量    static int roleCount;//静态成员函数static void RoleCount(){roleCount++;};//构造函数(调用静态成员方法)RolePlayer(){RoleCount();std::cout << "构造函数" << std::endl;};
}
主程序代码:
int main() {//创建三个对象RolePlayer roleA;RolePlayer roleB;RolePlayer roleC;//静态成员方法调用RolePlayer::RoleCount();std::cout << RolePlayer::roleCount << std::endl;system("pause");return 0;
}

最后输出的结果为:

这段代码定义了一个名为 RolePlayer 的类,其中包含一个静态成员变量 roleCount、一个静态成员方法 RoleCount() 和一个构造函数。

在构造函数中,每次创建 RolePlayer 对象时,都会调用 静态成员方法 RoleCount() ,从而增加 roleCount 的值。因此,每创建一个对象,roleCount 的值就会增加一次。

main() 函数中,创建了三个 RolePlayer 对象 roleAroleBroleC,然后通过类名调用了 RoleCount() 方法。由于 RoleCount() 方法是静态的,所以可以直接通过类名调用,而不需要创建类的实例。

最后,输出了 roleCount 的值。由于创建了三个对象并调用了一次静态成员方法,因此 roleCount 的值应为 4(初始值为0,加上三次构造函数中的调用)。

注意事项

在使用静态成员方法时需要注意以下几点:

  • 静态成员方法只能访问类的静态成员变量和其他静态成员方法,不能访问非静态成员变量和方法。

  • 静态成员方法通常用于执行与类相关的操作,而不需要特定实例的数据。

  • 静态成员方法的调用不依赖于类的实例,可以直接通过类名调用。

总之,静态成员方法是属于类而不是类的实例的方法,它们在类的所有实例之间共享,通常用于执行与类相关的操作。

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

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

相关文章

先进制造aps专题三 为什么java语言不适合作为aps算法的开发语言

为什么java语言不适合作为aps算法的开发语言 主要两个原因 1 java的list在特定位置插入&#xff0c;其实是重新生成一个新list,而不像c就是指针操作 2 数据量大&#xff0c;运行时间长&#xff0c;会跑崩 所以商业aps产品&#xff0c;都是清一色的用c写aps算法 先进制造…

Uniapp 点击图片放大

1、html(循环图片) <view v-for"(i,index) in photo_list" :key"photoindex"><img :src"i" alt"" click"ClickImage(photo_list,i)" /></view> 2、js(方法) ClickImage(PhotoAddress, index) {uni.previ…

值得让英伟达CEO黄仁勋亲自给OpenAI配送的AI服务器!一文带你了解算力,GPU,CPU!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

CSS_scss切换主题

目录assets/theme以下新建文件 _handle.scss import ./_themes.scss;// 定义混合指令, 切换主题,并将主题中的所有规则添加到theme-map中 mixin themify() {// 将themes中规则放入theme-mapeach $theme-name,$theme-map in $themes {$theme-map: $theme-map !global;[data-t…

怎么办,孟德尔随机化连锁不平衡跑不了!这里有本地连锁不平衡分析方法

大家都知道&#xff0c;孟德尔随机化很大程度依赖于国外的服务器。 最近我们发现孟德尔随机化常用的TwoSampleMR包的clump函数经常报错&#xff0c;这是由于服务器访问人群超时造成的现象&#xff0c;当线上版本失效。 很多人做孟德尔随机化&#xff0c;就卡在clump上。 于是我…

OpenStack云计算(十)——OpenStack虚拟机实例管理,增加一个计算节点并进行实例冷迁移,增加一个计算节点的步骤,实例冷迁移的操作方法

项目实训一 本实训任务对实验环境要求较高&#xff0c;而且过程比较复杂&#xff0c;涉及的步骤非常多&#xff0c;有一定难度&#xff0c;可根据需要选做。可以考虑改为直接观看相关的微课视频 【实训题目】 增加一个计算节点并进行实例冷迁移 【实训目的】 熟悉增加一个…

vue-router源码解析

vue-router简介 vue-router工作原理: url改变触发监听事件 (原理见路由模式)改变vue-router里面的current变量vue监听current的监听者获取到新的组件render新组件 vue-router如何实现无刷新页面切换: 采用某种方式使url发生改变。这种方式可能是调用HTML5 history API实现,…

Visual Studio Code 快捷键大全

文章目录 1. 全局快捷键2. 基本编辑3. 导航4. 查找 & 替换5. 多光标 & 选择6. 代码编辑7. 编辑器管理8. 文件管理9. 显示10. Debug 调试11. 终端&#xff08;Terminal&#xff09; 1. 全局快捷键 快捷键说明Ctrl Shift P&#xff0c;F1显示命令面板Ctrl P快速打开&am…

牛客NC199 字符串解码【中等 递归,栈的思想 C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/4e008fd863bb4681b54fb438bb859b92 相同题目&#xff1a; https://www.lintcode.com/problem/575 思路 解法和基础计算器1&#xff0c;2,3类似,递归参考答案C struct Info {string str;int stopindex;Info(str…

AOC vs. DAC:哪个更适合您的网络需求?

在现代网络通信中&#xff0c;选择合适的连接线缆对于数据传输的稳定性和速度至关重要。两种常见的线缆类型是 AOC&#xff08;Active Optical Cable&#xff09; 和 DAC&#xff08;Direct Attach Cable&#xff09;。本文将详细介绍这两种线缆的特点、优势和适用场景&#xf…

Aigtek:介电弹性体高压放大器在软体机器人研究中的应用

近年来软体机器人的研究成为目前机器人研究领域的热点&#xff0c;由于软体材料的自由度可以根据需求自由变化&#xff0c;因此软体机器人有着极高的灵活性&#xff0c;而且软体机器人因其材料的柔软性有着很好的人机交互性能和安全性。它的出现成功解决了传统的刚性机器人人机…

链表-LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRU是Least Recently Used的缩写&#xff0c;意为“最近最少使用”。LRU是一种常用的缓存淘汰策略&#xff0c;用于管理缓存中的数据。 举个例子&#xff0c;你从一堆书中找出…

JavaScript云LIS系统概述 前端框架JQuery+EasyUI+Bootstrap医院云HIS系统源码 开箱即用

云LIS系统概述JavaScript前端框架JQueryEasyUIBootstrap医院云HIS系统源码 开箱即用 云LIS&#xff08;云实验室信息管理系统&#xff09;是一种结合了计算机网络化信息系统的技术&#xff0c;它无缝嵌入到云HIS&#xff08;医院信息系统&#xff09;中&#xff0c;用于连…

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

Oracle 监控 SQL 精选 (一)

Oracle数据库的监控通常涉及性能、空间、会话、对象、备份、安全等多个层面。 有效的监控可以帮助 DBA 及时发现和解决问题&#xff0c;提高数据库的稳定性和性能&#xff0c;保障企业的数据安全和业务连续性。 常用的监控指标有&#xff1a; 性能指标&#xff1a; 查询响应时间…

实验二: 密码恢复

1.实验环境 用路由器和交换机搭建实验环境 2.需求描述 实现管理员主机对交换机和路由器的远程管理 设备上配置的密码都要被加密 3.推荐步骤 对于路由器的步骤如下&#xff1a; 重启路器&#xff0c;并按下 CtrlBreak 组合键中断0S 的加载&#xff0c;路由器将进入ROM Mon…

AUTOSAR OS Alarm讲解

Alarm定义 使用中断ISR可以构建以不同速率激活任务的系统。然而,对于复杂的系统,这种方式效率不高且不切实际。alarm(警报)提供了一种更方便、更灵活的调度系统的方式。 alarm由两部分组成: 一个计数器一个或多个与计数器关联的alarmalarm指定当达到特定的计数器值时要执…

千行 MySQL 学习笔记总结大全,语法大全

Windows服务 -- 启动MySQLnet start mysql -- 创建Windows服务sc create mysql binPath mysqld_bin_path(注意&#xff1a;等号与值之间有空格) 连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- 显示…

抽象工厂模式(Redis 集群升级)

目录 定义 Redis 集群升级 模拟单机服务 RedisUtils 模拟集群 EGM 模拟集群 IIR 定义使⽤接⼝ 实现调⽤代码 代码实现 定义适配接⼝ 实现集群使⽤服务 EGMCacheAdapter IIRCacheAdapter 定义抽象⼯程代理类和实现 JDKProxy JDKInvocationHandler 测试验证 定义 …

Mockaroo - 在线生成测试用例利器

简介&#xff1a;Mockaroo 是一个无需安装的在线工具&#xff0c;用于生成大量的自定义测试数据。它支持多种数据格式&#xff0c;如JSON、CSV、SQL和Excel&#xff0c;并能模拟复杂的数据结构。 历史攻略&#xff1a; 测试用例&#xff1a;多条件下编写&#xff0c;懒人妙用…