C++ static关键字详解:面向过程与面向对象
需积分: 7 126 浏览量
更新于2024-09-13
收藏 60KB DOC 举报
"C++中的`static`关键字的使用总结,包括在面向过程编程和面向对象编程中的不同应用,以及相关的代码示例。"
在C++编程语言中,`static`关键字具有双重含义,分别在面向过程和面向对象的上下文中发挥着不同的作用。下面我们将详细探讨这两个方面。
### 1. 面向过程设计中的`static`
#### 1.1 静态全局变量
静态全局变量与普通的全局变量相比,有一些显著的区别:
1. **存储区域**:静态全局变量存储在全局数据区,而不是像普通全局变量那样存储在BSS段(未初始化的全局变量)或数据段(已初始化的全局变量)。
2. **初始化**:静态全局变量在程序启动时被自动初始化为0,而未初始化的普通全局变量的初始值是不确定的。
3. **作用域**:静态全局变量只在其定义的文件内可见,外部文件无法直接访问,除非通过`extern`声明。
4. **生命周期**:静态全局变量在整个程序执行期间都存在,即使在函数调用结束后也不会被销毁。
5. **文件间隔离**:不同文件可以定义同名的静态全局变量,它们互不影响,避免了命名冲突。
例如,考虑以下代码:
```cpp
// File1
#include <iostream>
void fn();
static int n; // 定义静态全局变量
int main() {
n = 20;
std::cout << n << std::endl;
fn();
}
// File2
#include <iostream>
extern int n;
void fn() {
n++;
std::cout << n << std::endl;
}
```
在这个例子中,`n`作为静态全局变量,只能在`File1`中直接访问,但在`File2`中,必须通过`extern`声明来引用。
#### 1.2 静态局部变量
静态局部变量是在函数内部定义的,但其生命周期跨越多次函数调用。这意味着,静态局部变量在函数首次调用时初始化,之后每次调用都会保留其上一次调用结束时的值。
例如:
```cpp
#include <iostream>
void fn() {
static int count = 0;
count++;
std::cout << "Call count: " << count << std::endl;
}
int main() {
fn(); // 输出 "Call count: 1"
fn(); // 输出 "Call count: 2"
return 0;
}
```
在上面的`fn()`函数中,`count`变量是静态局部变量,因此在每次调用时都不会重新初始化,而是持续累加。
### 2. 面向对象设计中的`static`
在面向对象编程中,`static`关键字用于类的成员变量和成员函数。
#### 2.1 静态成员变量
静态成员变量是属于类的,而不是类的实例。所有类的对象共享同一份静态成员变量的副本,无论创建了多少个对象,静态成员变量只存储一份数据。
例如:
```cpp
class MyClass {
public:
static int sharedValue;
};
int MyClass::sharedValue = 0;
int main() {
MyClass obj1, obj2;
obj1.sharedValue = 10;
obj2.sharedValue = 20;
std::cout << obj1.sharedValue << " " << obj2.sharedValue << std::endl; // 输出 "20 20"
return 0;
}
```
在这个例子中,`sharedValue`是静态成员变量,当`obj1`和`obj2`改变它的值时,它们实际上是在修改同一个变量。
#### 2.2 静态成员函数
静态成员函数同样属于类,而不是类的实例。它们不能访问非静态成员变量,因为它们不与任何特定的对象关联。静态成员函数通常用于执行与对象状态无关的操作或工具方法。
例如:
```cpp
class MyClass {
public:
static void printMessage() {
std::cout << "Static function called." << std::endl;
}
};
int main() {
MyClass::printMessage(); // 不需要对象实例,直接调用
return 0;
}
```
在`MyClass`中,`printMessage`是静态成员函数,无需创建对象即可直接调用。
总结来说,`static`关键字在C++中扮演着多面角色,从控制变量的作用域、生命周期到提供类的静态成员,使得程序员能够更好地管理程序中的数据和功能。理解并正确使用`static`关键字是C++编程中的关键技能之一。
2014-09-24 上传
2024-04-07 上传
2020-09-05 上传
2020-09-05 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
毛壮
- 粉丝: 1
- 资源: 6
最新资源
- CSharp算法Cambridge University Press - Data Structures and Algorithms Using C# (Mar 2007)
- 华为_Verilog HDL入门教程
- 基于CAN总线的β-甘露聚糖酶发酵控制系统的研究
- 2009年考研计算机专业基础综合大纲
- altera nios从入门到精通
- 类人机器人手臂控制系统设计
- 单元测试测试用例设计
- Windows文件系统过滤驱动开发教程(第二版)
- 常用485芯片通信协议
- 232-485转接电路
- linux多线程编程手册.pdf
- Tornado使用指南
- x5045简介资料 设计的好帮手
- 《MiniGUI 用户手册》.pdf
- cc2500中文数据手册
- hibernate in action(第二版)