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

6.类作用域

6.类作用域

类声明,在未创建对象的时候,并没有在内存中申请一段空间,只有在类创建一个对象的时候,才会创建出一段内存空间。

作用域为类的常量:创建一个由所有对象共享的常量static const 或 enum 是正确选择而非静态成员常量则属于每个对象

class hjj { private: const int months = 12;//在对象没创建之前,就没有months这个存储值的空间,也就没有12. }
  • 这里的months非静态成员常量,它属于每个对象

  • 对象创建前months并不存在,没有内存地址

  • 每个对象都有自己的months = 12不能共享

法一:在类中声明一个枚举类型

class hjj { private: enum {Months = 12}; double costs[Months]; }

这种方式声明枚举并不会创建类数据成员,也就是说所有对象中都不包含枚举,另外months只是一个符号名称

法二:使用关键字static

class hjj { private: static const int Months = 12; double costs[Months]; }

static创建的变量是一个全局变量,这个类还没实例化一个对象,static这个静态变量在编译的时候就已经开辟内存空间了


方式是否属于对象是否共享是否占内存是否编译期常量可否取地址
const int months = 12;✅ 是❌ 否✅ 是✅ 是✅ 是
enum { Months = 12 };❌ 否✅ 是❌ 否✅ 是❌ 否
static const int Months = 12;❌ 否✅ 是❌/✅(视用法)✅ 是✅ 是
跟踪创建类对象的个数

要跟踪创建的类对象的数量,并且知道每个对象是第几个被创建的,可以通过在类中使用一个静态成员变量来实现。静态成员变量在类的所有对象之间共享,因此可以用来记录对象的创建次数。

以下是一个示例代码,展示如何实现这个功能:

示例代码

#include <iostream> using namespace std; ​ class MyClass { private: static int objectCount; // 静态成员变量,记录对象的创建次数 int id; // 每个对象的唯一标识符 ​ public: // 构造函数 MyClass() { id = objectCount; // 当前对象的 ID 是当前的 objectCount objectCount++; // 增加对象计数 } ​ // 获取当前对象的 ID int getID() const { return id; } ​ // 获取当前创建的对象总数 static int getObjectCount() { return objectCount; } }; ​ // 初始化静态成员变量 int MyClass::objectCount = 0; ​ int main() { MyClass obj1; MyClass obj2; MyClass obj3; ​ cout << "Object 1 ID: " << obj1.getID() << endl; // 输出 0 cout << "Object 2 ID: " << obj2.getID() << endl; // 输出 1 cout << "Object 3 ID: " << obj3.getID() << endl; // 输出 2 ​ cout << "Total objects created: " << MyClass::getObjectCount() << endl; // 输出 3 ​ return 0; }

输出示例

运行上述代码后,输出结果如下:

Object 1 ID: 0 Object 2 ID: 1 Object 3 ID: 2 Total objects created: 3

代码解析

  1. 静态成员变量objectCount

    • 用于记录类对象的创建次数。

    • 静态成员变量在类的所有对象之间共享,因此它可以在构造函数中被递增。

  2. 构造函数

    • 每次创建对象时,构造函数会被调用。

    • 在构造函数中,将当前的objectCount赋值给对象的id,然后递增objectCount

  3. 成员函数getID

    • 返回当前对象的唯一标识符(id)。

  4. 静态成员函数getObjectCount

    • 返回当前创建的对象总数。

  5. 初始化静态成员变量

    • 在类外初始化静态成员变量objectCount,初始值为 0。

总结

通过使用静态成员变量和构造函数,可以轻松地跟踪类对象的创建顺序和总数。每个对象的id是其创建顺序的唯一标识符,而静态成员变量objectCount用于记录总共创建了多少个对象。

http://www.zskr.cn/news/83987.html

相关文章:

  • 内存分配效率提升50%?.NET 9这3项优化你不可不知
  • 干翻Dubbo系列第二篇:Dubbo3相对其他版本的升级
  • 视频下载工具高效使用指南:轻松掌握DownKyi核心技巧
  • 【最优潮流】基于半定规划(SDP)模型求解最优潮流研究(Matlab代码实现)
  • iOS微信红包助手终极指南:2025快速配置教程
  • 720P I2V模型应用指南:性能优化与新手操作全解析
  • 零基础学渗透测试?7 款最佳工具详解,从入门到精通,一篇收藏够用
  • 2023年IEEE TIV,GA-LNS算法+直升机救援调度,深度解析+性能实测
  • 【收藏必备】手摸手带你搞定RAG:大模型检索增强生成实战教程
  • 日期题模版(made by yyf)
  • 2025中国电缆一线品牌推荐,中国电缆十大品牌推荐:知名品牌12月TOP榜单 - 品牌2026
  • K8S系列之6.1:自定义扩展(CRD 与 Operator 设计模式)
  • 基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning 算法研究(Matlab代码实现)
  • Day25
  • Day 36 MLP神经网络的训练
  • 中国台湾阳明交大团队让AI帮你实现真正的冻结时光
  • 工作生活没有节奏感怎么办?
  • 深入剖析高并发场景下ZooKeeper服务端Watcher实现原理
  • 量子计算开发者必看(VSCode性能调优实战手册)
  • TinyMCE5支持Latex公式转图片资源导入
  • 实习面试题-Go 性能优化面试题
  • 搞懂“元数据”:给数据办一张“身份证”
  • 04_C 语言进阶之避坑指南:多重 if-else 及多重条件混乱 —— 让逻辑不再 “绕迷宫”
  • [powershell 入门]第9天:PowerShell 安全、代码签名与企业部署 作业及深度解析
  • 【每天学习一点算法 2025/12/11】合并两个有序链表
  • 2025 最新货代 / 货运代理服务商 TOP5 评测!深度覆盖欧美加专线,全链路方案 + 全球网络权威榜单发布,赋能跨境电商与传统外贸高效出海 - 全局中转站
  • 2025 最新货代方案服务商 / 厂家 TOP5 评测!深度覆盖欧美加专线,全链路协同 + 跨境直达权威榜单发布,赋能电商全球化布局新生态 - 全局中转站
  • 基于Java Spring Boot的相机租赁系统的设计与实现-毕业设计源码50424
  • Python学习日记:探索列表的奥秘与编程乐趣
  • Windows上解决test.c LINK : fatal error LNK1181: 无法打开输入文件“aio.lib” 无法打开输入文件“cufile.lib”