4.3 友元
类的主要特点是数据隐藏,即类的私有成员只可以被类的内部使用。但是有的时候需要在类的外部访问类的私有成员,为此C++(www.cppentry.com)利用了一种新的机制--友元。
4.3.1 友元函数
友元函数不是类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有成员。在类的定义中声明友元函数时,需要在函数名前面加上friend。友元函数可以定义在类的内部,也可以在类的外部定义。
注意:友元在类的封装性中打了个孔,使封装性的强度下降。程序中如非必要,应尽量减少友元的使用。
【示例4.17】 利用友元函数实现类point的变量的初始化。
- #include"iostream.h"
- #include"math.h"
- class point
- {
- private:
- int x;int y;
- public:
- float distance()
- {
- return sqrt(x*x+y*y);
- }
- friend void init(point &,int a,int b);
- };
- void init(point &p,int a,int b)
- {
- p.x=a;
- p.y=b;
- }
- void main()
- {
- int x;int y;
- cin>>x>>y;
- point pt;
- init(pt,x,y);
- cout<<pt.distance()<<endl;
- }
分析:因为友元函数不是类的成员函数,因此友元函数一般都有一个该类的入口参数。上面的例子利用了友元函数对类的私有成员变量进行访问。虽然友元函数解决了对类的成员的访问,但它同时也造成了类的不安全性,类本来是要保证数据安全性的。因此在使用友元函数时要谨慎判断其访问权限,防止出现数据被不合法地访问。
【责任编辑:
云霞 TEL:(010)68476606】