尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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
RELATED

相关推荐

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

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

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

📅 2026/11/15 0:44:51
AI产品经理入门基础教程,非常详细,从入门到精通,收藏这一篇就够了

AI产品经理入门基础教程,非常详细,从入门到精通,收藏这一篇就够了

一、什么是AI产品经理? AI产品经理是负责将人工智能技术整合到产品中的专业人士。与传统产品经理相比,AI产品经理不仅需要具备深厚的技术理解力,还需要能够将技术与市场需求紧密结合,创造出更有竞争力的产品。AI产品经理的工作涉及…

📅 2026/9/8 13:24:06
PoE受电端隔离DC-DC设计实战:从时序到防护的完整指南

PoE受电端隔离DC-DC设计实战:从时序到防护的完整指南

PoE供电做了这几年,我最大的体会是:真正能让一个PoE设备稳定跑起来的,往往不是那套握手协议选得多花哨,而是后端电源方案有没有选对。早期我也图省事,48V进来直接挂一个非隔离Buck拉到5V,当时觉得便宜、简单…

📅 2026/10/7 19:33:36
MORE NEWS

更多资讯

📰

潍坊考电工证怎么考多久拿证别被中介坑了

潍坊考电工证怎么考多久拿证别被中介坑了 你是不是也遇到过这种情况:想考个电工证,不知道去哪报名,怕被中介坑?别急,今天我就用一个真实案例,手把手教你 潍坊考电工证怎么考 ,而且 多久拿证 也能说得清清楚楚。…

📰

重庆电工证全部重考吗?2026河南最新政策下如何避坑

重庆电工证全部重考吗?2026河南最新政策下如何避坑 不知道去哪报名怕被中介坑?2026河南最新政策对电工证的报考和复审流程有明确规定,但很多学员还是摸不着头绪。特别是重庆地区的电工证是否需要全部重考,成为近期很多从业者的关注重点。本文从政…

📰

电工证标志牌2026河南最新政策全攻略:中小施工企业负责人必看

电工证标志牌2026河南最新政策全攻略:中小施工企业负责人必看 你现在可能正在为电工证标志牌发愁,急需特种作业证才能上岗找工作,可流程复杂、政策多变,一不小心就耽误了工期。2026年河南最新政策对电工证标志牌的申请、考试、复审等环节都进行了…

📰

黄埔永和电工证报考官方回应:外省证怎么转?别踩这些坑

黄埔永和电工证报考官方回应:外省证怎么转?别踩这些坑 之前考的证在外省能不能转过来?这个问题,我见过太多人问。其实官方回应已经很明确了,关键是你得知道怎么操作。黄埔永和电工证报考,是很多人关注的热点,但如果你手里拿着外省的证,想在本地执业,…

📰

徐州特种工培训中心多少钱?学历不高也能报,这几点你必须知道

徐州特种工培训中心多少钱?学历不高也能报,这几点你必须知道 学历不高怕报不上名?其实你完全不用担心,徐州特种工培训中心的报名条件没有你想象中那么苛刻。只要你符合相关工种的报考条件,哪怕是初中毕业也能顺利报考。不过,报名前你需要知道这些信息:…

📰

清远电工证年审换证通过率揭秘:外省证书怎么转过来

清远电工证年审换证通过率揭秘:外省证书怎么转过来 之前考的证在外省能不能转过来?这个问题在清远电工证年审换证过程中是很多学员问得最多的。尤其对于在外地工作、后来回到清远发展的电工来说,证件的迁移和年审流程成为了一道门槛。不过别担心,下面我们…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬