c/c++--静态变量和静态函数(static)

发布时间:2026/11/2 7:51:38

c/c++--静态变量和静态函数(static) 目录1 c静态函数和静态变量1.1 C静态成员函数1.1.1定义与基本语法1.1.2 不依赖于实例1.1.3 访问限制1.1.4共享数据1.1.5 作用域与命名1.1.6 工厂函数和工厂方法常用途​​​1.2 c静态函数)1.3c静态变量2 c语言静态变量2.1 静态局部变量和静态全局变量2.2 静态函数1 c静态函数和静态变量1.1 C静态成员函数1.1.1定义与基本语法在C中使用static关键字定义静态成员函数。静态函数的定义如下class MyClass { public: static void myStaticFunction() { // 函数体 } };1.1.2 不依赖于实例成员函数变量静态函数和成员变量不需要类的实例就可以被调用。这意味着你可以在没有创建对象的情况下直接通过类名调用它。这在需要执行与具体对象无关的操作时非常有用。MyClass::myStaticFunction(); // 直接通过类名调用#include iostream using namespace std; class MyClass { private: static int staticVar; // 私有静态变量 public: // 公共静态函数用于访问静态变量 static int getStaticVar() { return staticVar; } // 公共静态函数用于修改静态变量 static void setStaticVar(int value) { staticVar value; } }; // 定义静态变量 int MyClass::staticVar 10; int main() { // 使用静态方法访问静态变量 std::cout MyClass::getStaticVar() std::endl; // 修改静态变量 MyClass::setStaticVar(20); std::cout MyClass::getStaticVar() std::endl; return 0; }1.1.3 访问限制静态函数只能访问静态成员变量和其他静态成员函数不能访问实例成员非静态成员。这是因为静态函数的上下文并不与任何具体实例关联。class MyClass { public: static int staticVar; int instanceVar; static void myStaticFunction() { staticVar 10; // 可以访问静态成员 // instanceVar 5; // 错误无法访问实例成员 } };1.1.4共享数据由于静态成员函数和静态成员变量属于类本身而不是某个特定对象所以它们可以在所有对象之间共享。这意味着所有对象共享同一个静态变量的值。class MyClass { public: static int count; MyClass() { count; } static void printCount() { std::cout Count: count std::endl; } }; int MyClass::count 0; // 静态变量初始化 int main() { MyClass obj1; MyClass obj2; MyClass::printCount(); // 输出 Count: 2 }1.1.5 作用域与命名静态函数的作用域一般限于定义它的类但可以通过类名进行访问。这使得它可以明确地标识出调用的是哪个类的静态函数避免命名冲突。1.1.6 工厂函数和工厂方法常用途工厂函数静态函数常用于实现不依赖于实例的工厂函数比如数学计算等。工厂函数在MathUtil类中静态函数squareRoot和power用于执行数学计算无需创建类的实例。工厂函数实例#include iostream #include cmath class MathUtil { public: // 静态函数计算平方根 static double squareRoot(double number) { return std::sqrt(number); // 返回平方根 } // 静态函数计算幂 static double power(double base, double exponent) { return std::pow(base, exponent); // 返回 base 的 exponent 次方 } }; int main() { double sqrtValue MathUtil::squareRoot(16.0); // 计算 16 的平方根 double powerValue MathUtil::power(2.0, 3.0); // 计算 2 的 3 次方 std::cout Square root of 16: sqrtValue std::endl; // 输出 4 std::cout 2 raised to the power of 3: powerValue std::endl; // 输出 8 return 0; }工厂方法静态成员函数可以用作工厂方法用于创建类的实例并返回。工厂方法在Circle类中静态成员函数createCircle用于创建Circle实例构造函数被私有化以防止直接实例化确保通过工厂方法来控制实例的创建。工厂方法实例#include iostream class Circle { private: double radius; // 构造函数私有化防止外部直接创建实例 Circle(double r) : radius(r) {} public: // 静态工厂方法创建 Circle 实例 static Circle createCircle(double r) { return Circle(r); // 返回 Circle 实例 } double area() const { return 3.14159 * radius * radius; // 计算圆的面积 } }; int main() { // 使用工厂方法创建 Circle 实例 Circle circle Circle::createCircle(5.0); // 创建半径为5的圆 std::cout Area of the circle: circle.area() std::endl; // 输出圆的面积 return 0; }​​​1.2 c静态函数)1.3c静态变量静态成员变量C中可以在类中定义静态成员变量这些变量属于类而不是某个实例。所有实例共享同一个静态成员变量。静态局部变量和C语言中的静态局部变量类似静态局部变量在函数中定义后只会初始化一次并在函数调用结束后保留其值。#include iostream class MyClass { public: static int count; // 静态成员变量 MyClass() { count; } static void printCount() { std::cout Count: count std::endl; } }; int MyClass::count 0; // 静态变量初始化 int main() { MyClass obj1; MyClass obj2; MyClass::printCount(); // 输出 Count: 2 return 0; }2 c语言静态变量2.1静态局部变量和静态全局变量C 语言中使用static修饰一个全局变量会将其作用域限制在定义它的文件内。也就是说其他文件无法访问这个变量如果使用static修饰一个局部变量主要有以下几个作用静态存储期局部变量会在程序开始时分配内存并在整个程序运行期间保持该内存的有效性而不是在每次进入该函数时分配和释放。这意味着该变量的生命周期延续至程序结束。保持值每次调用该函数时静态局部变量不会被重新初始化而是保持上一次函数调用结束时的值。这使得它可以用于在多次函数调用之间保留状态。作用域静态局部变量的作用域仍然局限于定义它的函数内外部无法直接访问。#include stdio.h void counter() { static int count 0; // 静态局部变量 count; printf(Count: %d\n, count); } int main() { counter(); // 输出: Count: 1 counter(); // 输出: Count: 2 counter(); // 输出: Count: 3 return 0; }在这个例子中count是一个静态局部变量它在每次调用counter()时保持其值。2.2 静态函数限制作用域静态函数的作用域仅限于定义它的源文件。这意味着其他文件无法调用这个函数有助于避免命名冲突。普通成员函数 隐含一个this参数知道自己操作哪个对象static成员函数 没有对象不需要this。内容存放位置是否有this普通成员变量对象内部堆/栈中的对象空间—静态成员变量静态区—普通成员函数代码代码区有this静态成员函数代码代码区没有this
延伸阅读

更多相关文章

2026/11/2 7:51:01

解密Prompt系列37. RAG之前置决策何时联网的多种策略

前言 之前我们分别讨论过RAG中的召回多样性,召回信息质量和密度,还有calibration的后处理型RAG。前置判断模型回答是否要走RAG的部分我们之前只提及了自我矛盾和自我拒绝者两个方案。这一章我们再补充几种RAG前置判断方案。 每种方案我们会挑1篇论文并主…

2026/10/25 11:48:35

使用Labelme构建高质量目标检测数据集:从路面缺陷检测实践出发

简介:在计算机视觉领域,目标检测是识别图像中特定对象并定位其位置的核心技术,广泛应用于工业质检、自动驾驶和安防监控等场景。其原理通常基于深度学习模型,通过大量标注数据学习目标的特征表示。高质量的数据集是模型性能的基石…

2026/11/2 7:50:18

数字时代护眼全攻略:从设备设置到用眼习惯

1. 护眼需求与现状分析现代人每天平均盯着电子屏幕的时间超过8小时,这个数字还在持续增长。作为一名长期伏案工作的内容创作者,我亲身体会到眼睛干涩、视力模糊带来的困扰。去年体检时,我的视力从1.0降到了0.6,这才意识到护眼不是…

2026/11/2 7:50:18

2025招标新规:评标专家终身追责与电子招投标技术解析

1. 招标行业监管新规深度解读2025年招标行业迎来重大变革,评标专家终身追责制度正式落地,全年已有82人因串标行为被追究刑事责任。这一系列严厉措施标志着我国招标投标监管进入"最严时代",对行业生态将产生深远影响。作为从业十余年…

2026/11/2 7:50:18

IGBT/MOSFET/SiC/GaN驱动电路设计与自举供电

简介:面向电力电子、电路设计与控制工程领域的学习者和工程师,这份专题文档系统梳理功率器件驱动电路从原理到落地的设计方法,聚焦IGBT、MOSFET、SiC MOSFET与GaN HEMT等器件的栅极驱动需求,回应高频开关、隔离抗扰、保护与热管理…

2026/11/2 7:50:18

SAP-MOM系统接口架构与RFC/RESTful对接实践

1. SAP-MOM项目接口对接核心架构解析在制造业信息化领域,SAP与MES系统(制造执行系统)的对接堪称经典场景。我经手的SAP-MOM(Manufacturing Operations Management)项目就采用了RFC与RESTful双通道对接模式,…

2026/11/2 7:50:18

人脑与类脑:从注意力机制到大模型落地实践

人脑与类脑:从一个模型看智能系统的另类打开方式我做了十几年AI相关的工作,从早期用传统机器学习硬抠特征,到后来上手Transformer,再到现在天天跟大模型打交道,最大的感受是:我们其实一直在不自觉地模仿人脑…

2026/11/2 7:45:16

旋转体体积计算:原理、公式与工程应用

1. 旋转体体积计算的基本概念 在工程设计和数学分析中,旋转体体积计算是一个常见而重要的问题。想象一下,当我们把一个平面图形绕着某条直线旋转一周时,就会形成一个三维物体,这就是旋转体。比如,一个直角三角形绕着直…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑