让我解释一下。
我的程序中有两个相同类的对象。我将焦点对象设置为第三个变量,这是一个指针。因此,我可以使用第三个指针变量切换焦点对象,并在我的代码的每一部分都可以访问,而不必知道哪个对象是焦点。
如下所示:
class MainClass
{
OtherClass otherClass;
Field fieldA;
Field fieldB;
Field *focusedField = &fieldA;
void someMethod(){
otherClass.othermethod();
focusedField = &fieldB;
otherClass.othermethod();
}
void MainClass()
: otherClass(focusedField);
{
}
}
但是现在我想在另一个这样的类中使用此指针:
class OtherClass{
OtherClass(Field *f){
focusedField = f;
}
Field *focusedField;
void otherMethod(){
std::cout << focusedField->getState() << std::endl;
}
}
这部分起作用... otherMethod方法的第一次调用使用的是fieldA,这是正确的,但是在我将其更改为fieldB之后的第二次调用仍在使用fieldA。
我想归档一下,我将focusedField传递给OtherClass,并且如果我在MainClass中更改它,它也会改变。
答案 0 :(得分:0)
要在J. S.’s comment上扩展,如果要“跟踪”值,请存储一个指针或对其的引用。如果值本身就是一个指针,那仍然是正确的。为了确保const正确性,您应该将OtherClass
成员(和构造函数参数)声明为Field *const &
,因为它不需要更改关注的Field
。如果也不需要写任何集中的Field
,请使用const Field *const &
。