假设我有一个C类,带有一些私有属性,例如整数j。在主要的我创建该类的两个对象,让我们说A和B.我需要在这些对象的一个私有属性上操作(可能使用一个函数)。例如,任务可以是在A.j中写入值2 *(B.j)。我不能简单地实现一个write方法和一个read方法,因为它是一个更复杂的MPI相关问题。是否有可能实现一个函数,在输入中接收两个对象并对其私有属性“做一些工作”?我必须在类的其他方法中声明它吗? 谢谢。
答案 0 :(得分:1)
您可以使用friend
功能访问private
和protected
班级成员。
class C {
int j;
friend void f(C& a, const C& b);
};
void f(C& a, const C& b) {
a.j = 2*b.j;
}
是的,您必须在类定义中声明好友。
但是,根据您的具体操作,这可能不是最佳解决方案。
答案 1 :(得分:0)
为什么不实施get
和set
方法?那将是最简单的解决方案......
class A{
int j;
public:
int getJ(){return j;};
void setJ(int j2){j=j2;};
};
int main(){
A B,C;
C.setJ(B.getJ()*2);
return 0;
}
或参考:
class A{
int j;
public:
int& access(){return j;};
};
int main(){
A B,C;
C.access() = B.access()*2;
return 0;
}
或使用朋友功能:
void doSomething(A &a, A &b){b.j = a.j*2;};
class A{
int j;
friend doSomething(A &a, A &b);
}
答案 2 :(得分:0)
由于我不知道您要做什么,我不知道以下解决方案是否适用于您的情况。你可以尝试类似“命令模式”的东西,传递一个函数来告诉你如何从另一个对象的j计算j的新值(如果你的语法看起来很奇怪,google为“lambda函数”):
class MyClass {
private:
int j;
public:
void ModifyBasedOnOtherObject (
const MyClass & other,
const std::function<int (int)> & f
) {
this->j = f (other.j);
}
};
// ...
a.ModifyBasedOnOtherObject (b, [] (int i) { return 2 * i; });