C/C++中static的作用解析
需积分: 35 104 浏览量
更新于2024-09-18
收藏 59KB DOC 举报
"C/C++中static作用"
C/C++中的`static`关键字有着双重含义,分别在面向过程和面向对象的编程中起着不同的作用。本文主要探讨的是`static`在C++中的两种应用场景。
首先,让我们来看看面向过程设计中的`static`。
1. 静态全局变量
在全局变量前添加`static`关键字,就将其声明为静态全局变量。静态全局变量的作用域限于当前源文件,其他文件无法访问,这提供了数据的封装性。与普通的全局变量相比,它们在程序执行开始时初始化为0,并且在整个程序生命周期内保持其值。例如:
```cpp
// Example1
#include <iostream>
void fn();
static int n; // 定义静态全局变量
int main() {
n = 20;
std::cout << n << std::endl;
fn();
}
void fn() {
n++;
std::cout << n << std::endl;
}
```
在这个例子中,`fn()`函数可以访问并修改静态全局变量`n`的值,而其他文件无法直接访问`n`。如果去掉`static`,全局变量`n`则变为普通全局变量,可在所有文件中可见。
2. 静态局部变量
在函数内部声明的`static`变量称为静态局部变量。这些变量只在声明它们的函数内部可见,且在函数每次调用之间保留其值。这意味着即使函数结束,它们的存储也不会被释放。例如:
```cpp
void count_calls() {
static int counter = 0;
counter++;
std::cout << "Function called " << counter << " times." << std::endl;
}
int main() {
count_calls(); // prints "Function called 1 times."
count_calls(); // prints "Function called 2 times."
return 0;
}
```
在这个例子中,`count_calls`每次被调用时,`counter`都会递增,因为它在函数调用之间保持其值。
接下来,我们转向面向对象编程中的`static`。
3. 类中的静态成员
在类中,`static`关键字用于声明静态成员变量和静态成员函数。静态成员不属于任何特定的对象实例,而是属于类本身。这意味着所有对象实例共享同一份静态成员变量的副本,而静态成员函数可以直接通过类名调用,无需创建对象。
```cpp
class MyClass {
public:
static int count; // 静态成员变量
static void incrementCount() { count++; } // 静态成员函数
};
int MyClass::count = 0;
int main() {
MyClass obj1, obj2;
MyClass::incrementCount(); // 增加计数器
std::cout << MyClass::count << std::endl; // 输出计数器的值
return 0;
}
```
在这个例子中,`MyClass::count`是所有`MyClass`对象共享的,而`incrementCount`函数可以不依赖于任何对象实例来操作这个计数器。
总结来说,`static`在C++中扮演了重要的角色,提供了数据的封装、跨函数调用的持久存储以及类级别的共享数据。理解并熟练运用`static`可以帮助编写更高效、更安全的代码。
2020-12-25 上传
2024-03-08 上传
2020-12-25 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-03-31 上传
tangzhen8839
- 粉丝: 25
- 资源: 13
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程