作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从另一个类访问和更改一个类的成员变量。我会尽力解释我的问题。我有一个名为 solution 的类,它处理我的大部分项目,它有几个不同的类作为成员变量。解决方案有一个矩阵(类)成员变量,我试图从其他类修改它。
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 和解决方案成为彼此的 friend 会更好。我希望我解释得足够好。
最佳答案
我建议完全颠倒你的设计,让解决方案矩阵接受对象输入。然后你可以只使用对象的公共(public)接口(interface)来做解决方案矩阵的突变。通过这种方式,您不需要另一个类的公共(public)状态的友元或公共(public)突变。
Solution::DoSomething()
{
mSolutionMatrix.modify(mObject1);
mSolutionMatrix.modify(mObject2);
}
关于c++ - 从另一个类访问类成员,使用指针好还是友元好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304471/
我是一名优秀的程序员,十分优秀!