4.3.2 友元成员
除了一般的函数可以作为类的友元外,一个类的成员函数也可以作为另一个类的友元。这样的函数不仅可以访问本类的所有成员,还可以访问其友元类的所有成员。需要注意的是当在一个类中的某个成员函数定义为另一个类的友元函数时需要首先定义此类。例如要定义类A的某个函数为类B的友元函数,那么需要先定义类B,然后再进行类A的成员函数与B友元的定义。
【示例4.18】 利用友元成员访问其类的数据成员。
- #include"iostream.h"
- #include"math.h"
- class line;
- class point
- {
- private:
- int x;int y;
- public:
- point(int a,int b)
- {
- x=a;y=b;
- }
- void print(line &);
- };
- class line
- {
- private:
- int x1;int y1;
- int x2,int y2;
- public:
- line(int a,int b,int c,int d)
- {
- x1=a;x2=b;
- y1=c;y2=d;
- }
- friend void point::print(line &);
- };
- void point::print(line &p)
- {
- cout<<x<<y<<endl;
- cout<<p.x1<<p.x2<<p.y1<<p.y2<<endl;
- }
- void main()
- {
- point A(7,8);
- line l(1,2,3,4);
- A.print(l);
- }
分析:上面类的友元成员的定义可以实现对类的数据成员进行访问。上面利用类point的成员函数,定义为类line的友元函数,实现了对友元的数据的访问。运行结果如下:
- 78
- 1234
对于一个友元成员来说,它不仅可以访问自己所在类中的私有成员和公有成员,同时还可以对声明为友元类的类的成员进行访问。使用友元成员可以使得两个类之间出现互相访问的一个"门"。这样解决了由于类的保护机制而出现的其他类绝对不允许访问的情况。
【责任编辑:
云霞 TEL:(010)68476606】