我正在尝试从另一个类访问和更改一个类的成员变量。我会尽力解释我的问题。我有一个名为solution的类,它处理我的项目的大部分,它有一些不同的类作为成员变量。解决方案有一个Matrix(类)成员变量,我试图从其他类修改。
class Solution{
public:
void DoSomething();
private:
Class1 mObject1;
Class2 mObject2;
Matrix mSolutionMatrix;
};
Solution::DoSomething()
{
mObject1.SetPointer(&mSolutionMatrix); // Set the pointer to solution matrix
mObject2.SetPointer(&mSolutionMatrix);
mObject1.ModifyMatrix(); // Modify the matrix in Class1
mObject2.ModifyMatrix(); // Now try to modify the solution matrix after object 1 has changed it.
}
然后,如果我有Class1和Class2,只定义一个,因为我尝试做的原则是相同的。他们都试图修改solution.mSolutionMatrix
class Class1{
public:
void SetPointer(Matrix* pointer);
void ModifyMatrix();
private:
Matrix* mPointerToMatrix; // This is where I am stuck
};
void Class1::SetPointer(Matrix* pointer)
{
mPointerToMatrix = pointer;
}
void Class1::ModifyMatrix()
{
// Do something to solution matrix
}
我想知道这是否可以通过使用指针,或者更好地制作彼此的Class1,Class2和解决方案的朋友。我希望我解释得很好。
答案 0 :(得分:1)
我建议完全颠倒你的设计并让解决方案矩阵接受对象输入。然后,您可以使用对象的公共接口来执行解决方案矩阵的突变。通过这种方式,您不需要另一个类的公共状态的友谊或公共变异。
Solution::DoSomething()
{
mSolutionMatrix.modify(mObject1);
mSolutionMatrix.modify(mObject2);
}