友元函数
- 为了编程需要,当需要允许一个函数或类访问访问另一个类中的私有或保护成员时,这时可以将这些类或函数声明为类的友元。
- 友元函数的声明:friend <返回值类型><函数名><(参数列表)>
示例
友元类
友元类的使用
另外:
- 友元关系不能传递。
B类是A类的友元,A类是C类的友元,如果没有特别声明,不能判断B类是C类的友元。 - 友元关系是单向的。
B类是A类的友元,B类所有的成员函数均可访问A类中的所有私有成员和保护成员。但不能推断A类也是B类的友元。
示例
#include <iostream>
#include <math.h>
using namespace std;
class A{
private:
int x;
int y;
public:
friend class B; //类A的友元类B的声明
A(int px,int py):x(px),y(py){ } //A的构造函数
~A(){ } //A的默认析构函数
void print()
{
cout<<"("<<x<<","<<y<<")"<<endl;
}
};
class B{
private:
A a1,a2; //B的两个私有成员是类A声明的两个对象
public:
//类B中的所有成员函数都是类A的友元函数
B(A pa1,A pa2):a1(pa1),a2(pa2){ } //B的构造函数
~B(){ } //B的默认析构函数
void print()
{
a1.print();
a2.print();
}
double len()
{
return sqrt((a1.x-a2.x)*(a1.x-a2.x)+(a1.y-a2.y)*(a1.y-a2.y));
}
};
int main()
{
A a1(1,3),a2(5,8);
B b(a1,a2);
cout<<"两点的坐标为:"<<endl;
b.print();
cout<<"两点之间的距离为:"<<b.len()<<endl;
return 0;
}