从另一个类访问类成员,使用指针或朋友更好吗?

时间:2015-02-03 16:57:04

标签: c++

我正在尝试从另一个类访问和更改一个类的成员变量。我会尽力解释我的问题。我有一个名为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和解决方案的朋友。我希望我解释得很好。

1 个答案:

答案 0 :(得分:1)

我建议完全颠倒你的设计并让解决方案矩阵接受对象输入。然后,您可以使用对象的公共接口来执行解决方案矩阵的突变。通过这种方式,您不需要另一个类的公共状态的友谊或公共变异。

Solution::DoSomething()
{
    mSolutionMatrix.modify(mObject1);
    mSolutionMatrix.modify(mObject2);
}