C++ 如何创建一个可以在同一类的多个对象上运行的函数,访问C+中的私有属性+;?

C++ 如何创建一个可以在同一类的多个对象上运行的函数,访问C+中的私有属性+;?,c++,function,class,object,methods,C++,Function,Class,Object,Methods,假设我有一个C类,带有一些私有属性,例如整数j。大体上,我创建了该类的两个对象,比如A和B。我需要对这些对象的一个私有属性进行操作(可能使用函数)。例如,任务可以是在A.j中写入值2*(B.j)。我不能简单地实现写方法和读方法,因为这是一个更复杂的MPI相关问题。是否可以实现一个函数,该函数在输入中接收两个对象,并通过它们的私有属性“执行某些工作”?我必须在类的其他方法中声明它? 谢谢。为什么不实施get和set方法呢?这将是最简单的解决方案 class A{ int j; public:

假设我有一个C类,带有一些私有属性,例如整数j。大体上,我创建了该类的两个对象,比如A和B。我需要对这些对象的一个私有属性进行操作(可能使用函数)。例如,任务可以是在A.j中写入值2*(B.j)。我不能简单地实现写方法和读方法,因为这是一个更复杂的MPI相关问题。是否可以实现一个函数,该函数在输入中接收两个对象,并通过它们的私有属性“执行某些工作”?我必须在类的其他方法中声明它?
谢谢。

为什么不实施
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);
}
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; });

您可以使用
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;
}
是的,您必须在类定义中声明友元


但是,根据您具体想做什么,这可能不是最佳解决方案。

由于我不知道您想做什么,我不知道以下解决方案在您的情况下是否有意义。您可以尝试类似于“命令模式”的方法,传递一个函数,告诉您如何从另一个对象的j计算新的j值(如果语法对您来说很奇怪,请用谷歌搜索“lambda函数”):

class-MyClass{
私人:
int j;
公众:
void ModifyBasedOnOtherObject(
const MyClass和其他,
const std::function&f
) {
这->j=f(其他.j);
}
};
// ...
a、 ModifyBasedOnOtherObject(b,[](int i){return 2*i;});

请给出一些您正在尝试的示例代码。您不能从类外访问私有成员,这是私有成员的要点。@Malloc您可以,只是不能直接像成员函数一样返回对私有数据的引用。或者通过兄弟对象彼此打开书本。私有、受保护和公共问题是继承问题。定义:“兄弟”对象。同一类的两个实例。兄弟姐妹可以访问其他实例的任何属性(数据或方法),只要提供指向该实例的指针。谢谢:这正是我要找的。