友元分为友元函数和友元类,是对数据封装和保护的一种突破,也可以提高程序运行的效率。
友元函数是通过引用类对象来访问类的成员。
当声明一个类为另一个类的友元类时,友元类的成员函数都是另一个类的友元函数。
直接看代码和注释:
附代码:
#include <iostream.h>
#include <math.h>
const double PI = 3.14159;
class Point
{
double x,y; // 默认为私有成员
public:
Point(double xx, double yy)
{
x = xx;
y = yy;
}
void display()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
friend double distance(Point &a, Point &b); // 声明友元函数
friend class Circle; // 声明友元类
};
// 实现友元函数
double distance (Point &a,Point &b) // 引用类对象作为形参
{
double dx = a.x-b.x; // 访问对象的私有成员
double dy = a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
class Circle // 友元类的声明和实现
{
double cir;
public:
void circum(Point a,Point b) // 用类对象作为形参
{
double dx = a.x-b.x; // 访问对象的私有成员
double dy = a.y-b.y;
cir = PI * sqrt(dx*dx+dy*dy);
cout<<"the circumstance of circle is "<<cir<<endl;
}
};
void main()
{
Point p1(2.0,2.0), p2(5.0,6.0);
cout<<"p1:";
p1.display();
cout<<"p2:";
p2.display();
double d = distance(p1,p2); // 调用友元函数
cout<<"p1和p2的距离="<<d<<endl;
Circle c;
c.circum(p1,p2);
cin.get();
}
-End-
