如何设置一个等于彼此的类的两个单独的实例c ++

时间:2018-01-26 21:03:15

标签: c++

据我所知,对于课程,私人成员只能由公共成员访问。但这是否适用于类的每个离散实例,或者一个实例的公共成员是否可以直接访问另一个实例的私有成员。

例如,假设有两个类实例:instance1instance2。并且说该课程有私人会员x和公开会员getX()setX()。如果我想将instance1.x设置为instance2.x,如果以下内容正确无误:

instance1.setX(instance2.x)

或者

instance1.setX(instance2.getX())

3 个答案:

答案 0 :(得分:4)

类的实例可以看到同一个类的另一个实例的私有成员。

类的实例无法看到另一个类的另一个实例的私有成员。

类的实例可以看到另一个类的另一个实例的公共成员。

当我们说“可以看”时,我们的意思是成员在实现类方法的范围内。

class A
{
public:
    Foo() { x = 10; }                  // is legal
    Bar(A & another) {another.x = 12;} // is legal
private:
    int x;
};

int main()
{
    A a;
    A b;

    a.Bar(b);  // Is legal

    return 0;
}

答案 1 :(得分:1)

该类成员函数或其朋友的内部代码,您可以使用

instance1.setX(instance2.x);
instance1.x = instance2.x;
this->x = instance2.x;
x = instance2.x;

否则,你需要写

instance1.setX(instance2.getX());

答案 2 :(得分:0)

好吧,想想你拨打instance1.setX()的地方。假设您在某个函数foo()中调用它:

void foo() {
    ...

    instance1.setX(instance2.x);

    ...
}

如果foo()不是Instance课程的成员或friend,则无法访问instance2.x;你必须在这里使用一个getter:instance2.getX()

否则,您可以使用以下任一方法:instance2.xinstance2.getX()