这个算不算 对象访问私有成员? 怎么理解?

来源:百度知道 编辑:UC知道 时间:2024/06/03 20:40:23
class complex{
public
complex(int r=0,int i=0){real=r;imag=i;}
complex operator +(complex c2);
private:
int real; int imag;
}

complex complex::operator +(complex c2)
{ return complex(real+c2.real,imag+c2.imag) //就是这一行
}
-----------------
为什么会有c2.real,那不是对象访问私有成员吗?
不知道前面的回答看清楚了没有?

很明显, 这里的C2 是一个对象,不是一个类, C2.real 是在访问私有成员
一个对象怎么能够访问"自己的"的私有成员呢?

c2.real是c2访问自己的私有成员real
加号前面的real是this->real

自己是可以访问自己的成员的。

你看 class 里面complex operator +(complex c2); 这一句, 是声明这个类有一个操作符函数+, complex complex::operator +(complex c2) 这句
是在类的声明外部实现类的函数。
::符号是域操作符,它表示 operator +(complex c2) 这个函数是属于complex这个类的,complex里面所有的成员都可以访问

关于私有、保护、共有的限制,是在类级别上的。
比如,除本类及本类的友员外,其它类或函数不能访问本类的私有成员。
而不是,除本对象及本对象的友员外,其它对象或函数不能访问本对象的私有成员。

这里,c2也是类complex的实例,所以在类complex中能访问c2的私有成员。
如果,c2的类类型不是complex,那么要报错了。