C++静态成员深度解析:静态函数与数据成员
需积分: 9 126 浏览量
更新于2024-11-09
收藏 15KB DOCX 举报
"C++静态成员函数小结"
在C++编程语言中,静态成员是类的一个重要特性,它们分为静态数据成员和静态成员函数两类。本文将深入探讨这两个概念及其重要性。
一、静态数据成员
1. **静态数据成员的声明与定义**
静态数据成员在类中通过`static`关键字声明,如`static int _i;`。与普通数据成员不同,静态数据成员的定义不能放在头文件中,因为它属于类域的全局变量。正确做法是在对应的cpp文件中进行定义和初始化,如:
```cpp
// xxx.h
class Base {
private:
static const int _i; // 声明
};
// xxx.cpp
const int Base::_i = 10; // 定义与初始化
```
这样做是为了避免因包含多次头文件导致的重复定义错误。
2. **共享性**
静态数据成员被类的所有对象共享,无论这些对象是类本身还是其派生类。这意味着,如果你有两个不同的对象,它们将共享同一份静态数据成员的值。例如:
```cpp
class Base {
public:
static int _num;
};
int Base::_num = 0;
class Derived : public Base {};
int main() {
Base a;
Derived b;
a._num++; // 基类对象增加
cout << "Base class static data member _num is " << a._num << endl;
b._num++; // 派生类对象增加
cout << "Derived class static data member _num is " << b._num << endl;
}
```
输出结果为1, 2,表明派生类与基类共享同一静态数据成员。
3. **作为成员函数参数**
静态数据成员可以作为成员函数的默认参数,而普通数据成员则不能。例如:
```cpp
class Base {
public:
static int staticVar;
int var;
void foo1(int i = staticVar); // 正确,staticVar可用作默认参数
};
```
二、静态成员函数
1. **非对象关联**
静态成员函数不与任何特定对象关联,它们是类级别的函数,可以不通过对象直接调用。由于它们没有隐含的`this`指针,因此不能访问非静态成员。
2. **权限控制**
静态成员函数同样遵循访问控制规则,可以是`public`、`protected`或`private`。
3. **用途**
静态成员函数常用于提供类的工具函数,比如计算类相关的辅助函数,或者作为类的工厂方法。
总结,静态成员在C++中扮演着特殊的角色,它们提供了共享数据和无对象依赖的函数。理解和熟练使用静态成员是提升C++编程能力的关键,特别是在处理类的共享状态和无侵入式设计时。在面试中,对静态成员的理解和应用能力也是评估候选人技能的重要指标。
2020-12-26 上传
2021-01-20 上传
2011-03-25 上传
2011-02-26 上传
2011-04-19 上传
点击了解资源详情
2013-04-01 上传
2013-04-12 上传
2022-11-25 上传
天上飘云
- 粉丝: 22
- 资源: 5
最新资源
- EnderalVREssentials
- wNjsCppBasic:编写本地NodeJs模块的工具集合
- code
- QuickCategory-for-Outlook
- 4-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- WxTools (Weather Data Tools):该软件包收集并显示Oregon Scientific的天气数据。-开源
- qianlizhixing12.github.io
- yzt4ios:易掌通ios版仓库
- MySQL学习基础SQL练习记录.zip
- storage
- Memory-Game:GWG-记忆游戏
- hyve-backend:简单的学习平台(带有REST API的Django后端)
- 贝加莱学习资料,入门和精通
- 捕鱼达人Java课程实践项目.zip
- tvk-poc:TVK POC资产和指南
- evaluating:PHP代码根据表格填写技能评估报告