news 2026/4/15 15:06:57

6.类作用域

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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用于记录总共创建了多少个对象。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 18:59:18

系统提示找不到msvcp140_codecvt_ids.dll文件 无法运行程序 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/9 2:31:42

超细整理,性能测试如何做?怎么做?性能压力负载(汇总二)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试结果分析…

作者头像 李华
网站建设 2026/4/15 9:10:39

C++的第十四天笔记

存储持续性、作用域和链接性C使用三种&#xff08;C11四种&#xff09;不同方案存储数据。这些方案的区别在于数据保留在内存中的时间。自动存储持续性&#xff1a;在函数定义中声明的变量&#xff08;包括函数参数&#xff09;&#xff0c;程序执行所属函数 / 代码块时创建&am…

作者头像 李华
网站建设 2026/4/9 8:42:49

874-LangChain框架Use-Cases - 基于智能体的动态槽位填充系统 - 案例分析

1. 案例目标 本案例旨在构建一个基于智能体的动态槽位填充系统&#xff0c;实现智能对话系统&#xff0c;能够分析用户请求并自动收集必要信息&#xff0c;通过对话补充缺失信息。 系统主要实现以下目标&#xff1a; 实现动态槽位填充功能&#xff0c;自动识别并收集必要信息…

作者头像 李华
网站建设 2026/4/15 2:11:32

ops-nn算子库生态纵览 - 构建健壮的AI算力基石

目录 &#x1f3af; 摘要 1. ops-nn&#xff1a;CANN神经网络计算的中枢神经系统 1.1 &#x1f504; 算子库的定位与演进轨迹 1.2 &#x1f4ca; 矩阵计算&#xff1a;AI算力的本质洞察 2. NPU硬件架构&#xff1a;算子设计的物理基础 2.1 &#x1f527; AI Core微架构深…

作者头像 李华