我想将一个类的变量访问到另一个类中,并将其设置为某个值,例如就像在这里的代码中一样,我想在some_flag
中将true
设置为secondClassFunction()
。可能吗?如果是的话,该怎么做?
系统架构导致的约束:
secondClassFunction()
的功能签名无法更改。以下是代码段: -
#include <iostream>
using namespace std;
class FirstClass{
bool some_flag;
public:
void setFlag(bool flag);
bool getFlag();
};
FirstClass::FirstClass(){
some_flag(false);
}
class SecondClass{
public:
void secondClassFunction();
}
SecondClass::secondClassFunction(){
// do something here.
// I want to access some_flag using SecondClass object.
// how to do this?
}
int main() {
SecondClass secObj;
secObj.secondClassFunction();
return 0;
}
包装类会有帮助吗?如果是,怎么样?
编辑: -
约束4.不能使类成为朋友的功能。
约束5.无法全局化标志变量。
详细说明: -
flag
是在FirstClass
成员的函数中设置的。
我希望在flag
成员的函数中重置此SecondClass
。
由于系统架构的限制,这两个类不相关,可继承,并且它们的访问说明符无法更改。
flag
就像一个信号量,它被多个任务用来表示活动的状态,例如,处理器是否从移动应用程序收到了某个命令。
答案 0 :(得分:0)
您似乎并不关心FirstClass
的实例。因此,以下方法适合您:
void SecondClass::secondClassFunction()
{
// Create local instance of the object to change
FirstClass first;
first.setFlag(true);
}
但它完全没有意义。您需要知道要修改的对象。我建议三个选项:
FirstClass
静态,全局或单身的实例并对其进行修改some_flag
及其setter static FirstClass
SecondClass::secondClassFunction()
的实例设置为上下文
第三个选项解释:
class FirstClass; // Forward declaration
class SecondClass
{
...
FirstClass* firstClassInstance;
...
void setFirstClassInstanceToModify(FirstClass* first)
{
firstClassInstance = first;
}
...
};
void SecondClass::secondClassFunction()
{
firstClassInstance->setFlag(true);
}
并像这样称呼它
FirstClass first;
...
SecondClass second;
...
second.setFirstClassInstanceToModify(&first);
second.secondClassFunction();
但在调用secondClassFunction