关于友元函数.

来源:百度知道 编辑:UC知道 时间:2024/05/22 05:04:22
关于友元函数.目前特别迷糊,书上仅说是用来访问友类中私有和受保护的对像.在函数名前放上friend关键字就行了.这个说法比较笼统啊.高手给我讲讲啊..下面附个例子:

#include <iostream.h>
class loc
{
int longitude, latitude;
public:
loc (void) {}
loc (int lg, int lt)
{
longitude = lg;
latitude = lt;
}
void show (void)
{
cout << longitude << " " ;
cout << latitude << endl;
}
friend loc operator+(loc op1, loc op2);
loc operator=(loc op2);
};
loc operator + (loc op1, loc op2)
{
loc temp;
temp.longitude = op1.longitude + op2.longitude;
temp.latitude = op1.latitude + op2.latitude;
return temp;
}
loc loc::operator = (loc op2)
{
longitude =op2.longitude;
latitude =op2.latitude;
return *this;
}
void main(void)
{
loc ob1(10,20), ob2(5,30);
ob1 = ob1 + ob2;

loc类的longitude和latitude成员是private,即私有的,类外的函数不能直接访问它们,所以如果把friend loc operator+(loc op1, loc op2);去掉的话,这个函数中的
temp.longitude = op1.longitude + op2.longitude;
temp.latitude = op1.latitude + op2.latitude;
就是访问类的私有成员,是不允许的.

友元就是同一类型不同变量可以访问
公共就是任何类型不同变量才能访问
私有就是同一类型同一变量内部才能访问

friend loc operator+(loc op1, loc op2);
指的就是两个变量op1和op2都是loc类型,可以用“+”进行操作,也就是同一类型不同变量互相访问

呵呵,C++的class如果不声明则默认为private的,所以int longitude, latitude;都是private的,当然得用友元了。