如何实现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
相关产品推荐
相关产品推荐

