当前位置: 首页 > news >正文

深入解析C++静态成员变量与函数

当然可以!下面是对这段 C++ 代码的逐行详细注释说明和解释,帮助你理解静态成员变量和静态成员函数的使用。


🧱 类定义部分:MyClass

 

cpp

深色版本

#include <iostream>

说明:包含标准输入输出流库,用于使用 std::cout 进行输出。

 

cpp

深色版本

class MyClass {

说明:定义一个类,名为 MyClass

 

cpp

深色版本

public:

说明:接下来的成员都是公共(public)权限,意味着外部可以访问这些成员。

 

cpp

深色版本

    static int staticValue; // 静态成员变量

说明:声明一个静态成员变量 staticValue

  • “静态”表示这个变量属于整个类本身,而不是类的某个具体对象。
  • 所有 MyClass 的对象共享同一个 staticValue
 

cpp

深色版本

    MyClass() {// 每创建一个对象,静态变量增加1staticValue++;}

说明:这是默认构造函数。每当创建一个 MyClass 对象时,该构造函数会被调用一次,并且让 staticValue 增加 1。

  • 因为 staticValue 是静态变量,它被所有对象共享,所以每创建一个对象,它的值都会递增。
 

cpp

深色版本

    static int getStaticValue() {// 静态成员函数return staticValue;}

说明:定义一个静态成员函数 getStaticValue(),用于返回静态变量 staticValue 的值。

  • 静态成员函数可以直接访问静态成员变量,但不能访问非静态成员变量或非静态成员函数。
  • 它不依赖于任何具体的对象实例。
 

cpp

深色版本

};

说明:类定义结束。


🧪 静态成员的初始化

 

cpp

深色版本

// 类外初始化静态成员变量
int MyClass::staticValue = 0;

说明:静态成员变量必须在类外进行一次定义和初始化。这里将 staticValue 初始化为 0。


🚀 主函数部分

 

cpp

深色版本

int main() {

说明:程序入口函数。

 

cpp

深色版本

    MyClass obj1, obj2;

说明

  • 创建两个 MyClass 类型的对象:obj1 和 obj2
  • 每创建一个对象,都会调用一次构造函数,从而使 staticValue 自增一次。
 

cpp

深色版本

    std::cout << MyClass::getStaticValue(); // 输出2

说明

  • 调用静态成员函数 getStaticValue(),直接通过类名 MyClass:: 调用(不需要对象)。
  • 此时已创建了两个对象,所以 staticValue == 2
  • 输出结果是 2
 

cpp

深色版本

}

说明:主函数结束。


✅ 总结

功能说明
static int staticValue;声明一个静态成员变量,属于类本身,所有对象共享
static int getStaticValue()静态成员函数,用于获取静态变量值
构造函数中对 staticValue++每次创建对象时自动计数
类外初始化 MyClass::staticValue = 0必须在类外显式初始化静态变量
MyClass::getStaticValue()无需对象即可调用

🔁 示例流程图

  1. 静态变量 staticValue 初始化为 0。
  2. 创建 obj1 → 构造函数调用 → staticValue = 1
  3. 创建 obj2 → 构造函数调用 → staticValue = 2
  4. 调用 MyClass::getStaticValue() → 返回 2
  5. 输出结果:2

如果你还想扩展功能,比如:

  • 添加析构函数,在对象销毁时减少计数;
  • 使用友元函数打印信息;
  • 或者限制只能创建一定数量的对象;

欢迎继续提问,我可以帮你实现 😊

相关文章:

  • 网络安全之身份验证绕过漏洞
  • 前沿技术:如何从多模态文件中自动提取有效信息?
  • 学习路之uniapp--unipush2.0推送功能--给自己发通知
  • PostGIS实现栅格数据导出PNG应用实践【ST_AsPNG 】
  • 【Redis8】最新安装版与手动运行版
  • springboot3+vue3融合项目实战-大事件文章管理系统-更新文章分类和增加文章分类优化-分组校验
  • FlashAttention:传统自注意力( Self-Attention)优化加速实现
  • BEVDet
  • 实战5:个性化数字艺术生成与销售
  • 【泛微系统】后端开发Action常用方法
  • 项目交付标准不明确,如何确保验收顺利
  • 谷歌I/O 2025 完全指南:由Gemini开创的AI新时代及其对我们未来的影响
  • Bently Nevada 3500/61 非隔离I/O模块 (133819-02)
  • c++11特性——可变参数模板及emplace系列接口
  • 电子电路:怎么理解放大电路中集电极电流Ic漂移?
  • 命令行删除node_modules
  • 系统工程与一般系统理论 | 技术 / 应用 / 跨领域认知融合
  • 时源芯微|六大步骤解决EMC问题
  • 【AI流程应用】智能知识库搭建与实战应用
  • 【Linux】借助gcc源码修改,搜索头文件当前进展
  • 大连哪个公司做网站开发的/太原seo哪家好
  • 做的网站首页图片显示不出来/系统优化方法
  • 政府部门网站建设内容/企业培训课程分类
  • 商丘网站制作方案/百度网盘下载速度
  • 网站建设教程答允苏州久远网络/抖音关键词排名查询
  • 美橙做过网站案例/会计培训班需要学多长时间