将来自不同类别的对象设置为彼此相等

时间:2019-07-02 03:48:44

标签: c++ pointers

我试图弄清楚如何使用指针从两个彼此相等的类中设置一个对象(请参见代码中的粗体)。应该为第1类(a,b)的私有成员分配由第2类成员(x,y)指向的值。

我尝试使用好友,但是我不确定这是分配成员的正确方法。

using namespace std;

class Class1
{
private: int a;
        int b;

};
class Class2
{
private: int *x;
int *y;

};


int main() {

    Class2 Object2;
    **Class1 Object1 = Object2;**
    return 0;
}

这只需执行即可而不会出错。

2 个答案:

答案 0 :(得分:0)

我将把您的示例减少到演示此示例所需的最低限度。假设我们有以下两个类:

class A {
    int x = 1;
    friend class B;
};

class B {
    int y = 2;
};

我们说过BA的朋友,因此可以访问它的内部信息:

int main(){
    A a;
    B b;
    b.y = a.x;
}

您可能认为这可行,这可能是您尝试过的;但是,我们正在尝试从a.x内部访问main,并且main不是A的朋友。您只能从AA访问B的内部,因此我们将这样做:

class B {
    int y = 2;
    void set(const A& a) { y = a.x; }
};

现在,我们给B的{​​{1}},它可以访问A,所以现在我们只调用x。在这里使用指针的事实没有什么区别,您只需要像往常一样取消对它们的引用即可。

答案 1 :(得分:0)

作为Tas答案的扩展,如果您希望使用=运算符的语法糖,则可以在Class1中重载此运算符以执行与set相同的操作。

Class1& operator=(const Class2& _other)
{
  y = a.x;

  return *this;
}

在这样使用它的地方:

int main() {

  Class2 Object2;
  Class1 Object1;

  Object1 = Object2; 

  return 0;
}
相关问题