You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现CMyClass对象m_i独立取值且批量置零?

实现类实例独立成员变量及全局重置功能

需求说明

需要实现类CMyClass的每个对象拥有独立的m_i变量值,同时存在一个函数,调用后能将所有该类对象的m_i值统一置为0。

原代码问题

原代码错误地将m_i声明为static成员变量,导致所有类实例共享同一个m_i值,运行结果不符合预期:

#include <iostream>

using namespace std;
class CMyClass {
public:
   static int m_i;
};

int CMyClass::m_i = 0;
CMyClass myObject1;
CMyClass myObject2;

int main() {
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   myObject1.m_i = 1; // 将第一个对象的m_i设为1
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   myObject2.m_i = 2; // 将第二个对象的m_i设为2
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   CMyClass::m_i = 0; // 将所有对象的m_i置为0
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;
}

原代码输出

0
0
1
1
2
2
0
0

预期输出

0
0
1
0
1
2
0
0

改进方案(适用于MCU,无需额外库)

将m_i改为非static成员变量,保证每个实例拥有独立值;同时维护一个所有类实例的数组,通过遍历数组实现全局重置功能:

#include <iostream>

using namespace std;
class CMyClass {
public:
    // 成员变量不应为static,确保每个类实例拥有独立值
    int m_i;
};

CMyClass instances[2];

void resetInstances() {
    for (auto &instance: instances) {
        instance.m_i = 0;
    }
}

int main() {
   cout << instances[0].m_i << endl;
   cout << instances[1].m_i << endl;

   instances[0].m_i = 1;
   cout << instances[0].m_i << endl;
   cout << instances[1].m_i << endl;

   instances[1].m_i = 2;
   cout << instances[0].m_i << endl;
   cout << instances[1].m_i << endl;

   resetInstances();
   cout << instances[0].m_i << endl;
   cout << instances[1].m_i << endl;
}

改进后输出

0
0
1
0
1
2
0
0

内容的提问来源于stack exchange,提问作者Siegurd01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:45:36