C++ 中 static 关键字

修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在 main 函数运行前就分配了空间,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。
修饰普通函数,表明函数的作用范围,仅在定义该函数的文件内才能使用。在多人开发项目时,为了防止与他人命名空间里的函数重名,可以将函数定位为 static。
修饰成员变量,修饰成员变量使所有的对象只保存一个该变量,而且不需要生成对象就可以访问该成员。
修饰成员函数,修饰成员函数使得不需要生成对象就可以访问该函数,但是在 static 函数内不能访问非静态成员。

以下是对上述关于 static 修饰不同内容的详细解释及示例:

一、修饰普通变量

static 修饰普通变量时,这个变量被存储在静态存储区。它在程序开始运行前就分配空间,并且在整个程序的生命周期内都存在。如果有初始值,就用初始值初始化;如果没有初始值,系统会用默认值初始化。

例如:

#include <iostream>void testFunction() {static int staticVariable = 0;std::cout << "Static variable: " << staticVariable << std::endl;staticVariable++;
}int main() {testFunction();testFunction();testFunction();return 0;
}

在这个例子中,函数 testFunction 中的静态变量 staticVariable 只在第一次调用函数时初始化一次,后续调用不会再次初始化,而是保留上次调用后的值。每次调用函数时,staticVariable 的值会递增。

二、修饰普通函数

static 修饰普通函数可以限制函数的作用范围,使其仅在定义该函数的文件内可见。在多人开发项目时,这有助于避免函数名冲突。

例如:

// file1.cpp
static void file1Function() {std::cout << "This is a function in file1." << std::endl;
}// file2.cpp
static void file2Function() {std::cout << "This is a function in file2." << std::endl;
}

在这个例子中,file1Functionfile2Function 分别在不同的文件中定义为 static,它们只能在各自的文件内被调用,其他文件无法访问这些函数。

三、修饰成员变量

static 修饰成员变量时,所有的对象共享同一个变量。它不属于任何一个特定的对象,而是属于整个类。不需要生成对象就可以通过类名直接访问该成员变量。

例如:

#include <iostream>class MyClass {
public:MyClass() {count++;}static int getCount() {return count;}
private:static int count;
};int MyClass::count = 0;int main() {MyClass obj1;MyClass obj2;MyClass obj3;std::cout << "Number of objects created: " << MyClass::getCount() << std::endl;return 0;
}

在这个例子中,count 是静态成员变量,用于记录创建的对象数量。每个对象的构造函数都会增加 count 的值。可以通过静态成员函数 getCount 来访问静态成员变量 count,而不需要创建对象。

四、修饰成员函数

static 修饰成员函数使得不需要生成对象就可以访问该函数。但是,在静态成员函数内不能访问非静态成员,因为静态成员函数不依赖于特定的对象,而非静态成员属于特定的对象。

例如:

#include <iostream>class MyClass {
public:static void staticFunction() {// 不能访问非静态成员变量和成员函数// std::cout << nonStaticVariable << std::endl;// nonStaticFunction();std::cout << "This is a static function." << std::endl;}void nonStaticFunction() {std::cout << "This is a non-static function." << std::endl;}
private:int nonStaticVariable = 10;
};int main() {MyClass::staticFunction();return 0;
}

在这个例子中,静态成员函数 staticFunction 不能访问非静态成员变量 nonStaticVariable 和非静态成员函数 nonStaticFunction

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

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

相关文章

Python进阶04-网络编程

零、文章目录 Python进阶04-网络编程 1、计算机网络 网络相关知识请参考计算机网络详解 &#xff08;1&#xff09;IP地址的概念 IP 地址就是标识网络中设备的一个地址&#xff0c;好比现实生活中的家庭地址。 &#xff08;2&#xff09;IP地址的表现形式 IP 地址分为两类…

Javaweb学习之Vue数据绑定(五)

前期回顾 Javaweb学习之Vue实践小界面&#xff08;四&#xff09;-CSDN博客 认识数据绑定 Vue.js 中的数据绑定是一个核心概念&#xff0c;它极大地简化了前端开发中数据与视图&#xff08;DOM&#xff09;之间的同步问题。Vue.js 通过其响应式系统实现了数据的双向绑定&…

【Python Web开发】Flask+HTML学习笔记

目录 Flask框架一、安装flask库二、运行一个网页三、库函数及变量 HTML标签语言一、基本格式二、标签2.1 块级标签2.1.1 标题2.1.2 div2.1.3 图片2.1.4 列表2.1.5 表格 2.2 行内标签2.2.1 span2.2.2 超链接2.2.3 输入 2.3 其他标签2.3.1 提交表单 Flask框架 一、安装flask库 …

电阻柜柜体采用不锈钢材质有什么优点

电阻柜柜体采用不锈钢材质有什么优点&#xff1a; 1. **耐腐蚀性**&#xff1a;不锈钢材质具有极好的耐腐蚀性&#xff0c;能有效抵抗各种腐蚀物质的侵蚀&#xff0c;确保设备经久耐用。 2. **美观大方**&#xff1a;不锈钢表面光滑&#xff0c;质感细腻&#xff0c;呈现出大气…

Elasticsearch写入、读取、更新、删除以及批量操作(golang)

目录 1、背景 2、elasticsearch基础操作 2.1 创建es链接客户端 2.2 创建、删除索引 2.3 插入文档 2.3 查询文档 2.4 删除一条文档 2.5 更新文档 2.6 逻辑查询 2.7 滚动查询(批量查询) 2.8 批量插入数据 2.9 批量更新文档 2.10 批量删除文档 3、检索条件设置 4、测…

探索Unity与C#的无限潜能:从新手到高手的编程之旅

在数字创意与技术创新交织的今天&#xff0c;Unity游戏引擎凭借其强大的跨平台能力和灵活的编程接口&#xff0c;成为了无数开发者心中的首选。而C#&#xff0c;作为Unity的官方脚本语言&#xff0c;更是以其面向对象的特性和丰富的库支持&#xff0c;为游戏开发注入了无限可能…

Golang | Leetcode Golang题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; func getMoneyAmount(n int) int {f : make([][]int, n1)for i : range f {f[i] make([]int, n1)}for i : n - 1; i > 1; i-- {for j : i 1; j < n; j {f[i][j] j f[i][j-1]for k : i; k < j; k {cost : k max(f[i][k-1], f[…

关于Scrapy的那些事儿(四)Scrapy Shell

Scrapy Shell launch Scrapy shell 使用如下命令&#xff1a; scrapy shell <url>当运行scrapy shell的时候&#xff0c;它为我们提供了一些功能函数&#xff1a; shelp() :打印可用对象和快捷命令的帮助列表fetch&#xff08;request or url&#xff09;&#xff1a;…

CMake构建学习笔记11-minizip库的构建

准确来说&#xff0c;minizip其实是zlib提供的辅助工具&#xff0c;位于zlib库的contrib文件夹内。minizip提供了更为高级一点的接口&#xff0c;能直接操作文件进行压缩。不过&#xff0c;有点麻烦的是这个工具并没有提供CMake构建的方式。那么可以按照构建giflib的方式&#…

Java开发工程师-匹配性岗位(借鉴性质)

1.匹配性质 技能迁移:Java开发工程师通常具备较强的编程能力、逻辑思维和问题解决能力,这些技能可以迁移到其他领域。行业选择:考虑目前行业趋势以及未来发展方向,Java工程师可以转向大数据、人工智能、云计算等等领域。个人兴趣与职业发展:转行时个人的兴趣和职业发展规划…

1.1量化交易的定义与魅力

Hey&#xff0c;Python高手们&#xff0c;欢迎来到量化交易的世界&#xff01;在这里&#xff0c;我们不谈风花雪月&#xff0c;只谈数字和代码。量化交易&#xff0c;听起来是不是有点像是“用电脑代替人脑做交易”的黑科技&#xff1f;没错&#xff0c;你猜对了&#xff01; …

【JAVA入门】Day28 - 数据结构

【JAVA入门】Day28 - 数据结构 文章目录 【JAVA入门】Day28 - 数据结构一、栈二、队列三、数组3.1 ArrayList 四、链表4.1 LinkedList 五、二叉树5.1 二叉查找树5.2 二叉树的遍历方式5.3 平衡二叉树5.4 平衡二叉树的旋转5.5 平衡二叉树需要旋转的几种情况 六、红黑树6.1 红黑规…

永成防回水防回气装置煤矿毫不犹豫选择

永成防回水防回气装置煤矿毫不犹豫选择&#xff0c;不敢说我们有多好&#xff0c;我们只把简单的事做好&#xff0c;用心服务&#xff0c;因为品质&#xff0c;所以信任。因为信任&#xff0c;所以值得选择。 本防回水防回气装置是一种用于煤矿瓦斯管路爆渣和燃烧时防止回火、…

abstract类

1 问题 abstract类不能用 new运算符创建对象&#xff0c;必须产生其子类&#xff0c;由子类创建对象。若 abstract类的类体中有 abstract()方法&#xff0c;则只允许声明&#xff0c;不能带有方法体&#xff0c;而该类的子类必须实现 abstract()方法。一个abstract类只关心子类…

3_1_PID控制原理

自从计算机进入控制领域以来&#xff0c;用数字计算机代替模拟计算机调节器组成计算机控制系统&#xff0c;不仅可以用软件实现PID控制算法&#xff0c;而且可以利用计算机的逻辑功能&#xff0c;使PID控制更加灵活。数字PID控制在生产过程中是一种最普遍采用的控制方法&#x…

[Algorithm][综合训练][奇数位丢弃][求和][计算字符串的编辑距离]详细讲解

目录 1.奇数位丢弃1.题目链接2.算法原理详解 && 代码实现 2.求和1.题目链接2.算法原理详解 && 代码实现 3.计算字符串的编辑距离1.题目链接2.算法原理详解 && 代码实现 1.奇数位丢弃 1.题目链接 奇数位丢弃 2.算法原理详解 && 代码实现 解法…

YOLOv9改进策略【损失函数篇】| 利用MPDIoU,加强边界框回归的准确性

一、背景 目标检测和实例分割中的关键问题&#xff1a; 现有的大多数边界框回归损失函数在不同的预测结果下可能具有相同的值&#xff0c;这降低了边界框回归的收敛速度和准确性。 现有损失函数的不足&#xff1a; 现有的基于 ℓ n \ell_n ℓn​范数的损失函数简单但对各种尺度…

计算机网络速成(三)

一、网络协议与模型 什么是协议&#xff1f; 协议是指计算机系统中完成特定任务所必需的规则和约定&#xff0c;特别是数据传输和交换的规则和约定。OSI和TCP/IP是什么&#xff1f; OSI&#xff08;开放式系统互连参考模型&#xff09;是一种网络架构模型&#xff0c;将网络系…

linux配置jenkins环境

目录 一、安装javal环境 二、安装ansible 三、安装git 四、配置服务器免密登陆 五、安装jenkins 一、安装java环境 本次安装jdk的版本为11&#xff0c;jdk的版本需要和jenkins版本相匹配 1、下载jdk&#xff0c;可以去oracle官网注册账号进行下载&#xff0c;不想折腾的可…

Redis与SpringMVC的整合与最佳实践

整合Redis与Spring MVC&#xff08;现在通常是Spring Boot的一部分&#xff09;可以提高应用性能&#xff0c;特别是在处理大量数据缓存和会话状态管理方面。 下面是一些关于如何整合Redis与Spring MVC的最佳实践&#xff1a; 1. 引入依赖 首先&#xff0c;你需要在你的项目中…