据我所知,对于课程,私人成员只能由公共成员访问。但这是否适用于类的每个离散实例,或者一个实例的公共成员是否可以直接访问另一个实例的私有成员。
例如,假设有两个类实例:instance1
和instance2
。并且说该课程有私人会员x
和公开会员getX()
和setX()
。如果我想将instance1.x
设置为instance2.x
,如果以下内容正确无误:
instance1.setX(instance2.x)
或者
instance1.setX(instance2.getX())
答案 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.x
或instance2.getX()
。