定义:
友元是一种函数与类 / 类与类之间的关系。
在类中通过 friend 关键字来声明友元(函数/类)
当一个函数与一个类发生了友元的关系,那么函数就是类的友元,函数就具有的友元的属性,
并且友元是单向的,只能说函数是类的友元,不能说类是函数的友元。
友元的特性:
友元不是类的一部分,因此没有访问限制,因此类的友元可以访问具体类的所有成员。
友元不具有传递性。
类的友元可以是成员函数,可以是具体的类
#include <stdio.h> #include <math.h> class Point // 实体类 { double x; double y; public: Point(double x, double y) { this->x = x; // 通过this指针来访问当前对象的x,y变量 this->y = y; } double getX() { return x; } double getY() { return y; } friend double func(Point& p1, Point& p2); // 将实体函数和实体类建立友元联系,函数就是类的友元 }; // 外部函数 func 具有了访问了类内部成员的属性 double func(Point& p1, Point& p2) // 实体函数 { double ret = 0; ret = (p2.y - p1.y) * (p2.y - p1.y) + // 直接访问 Point 的私有成员 (p2.x - p1.x) * (p2.x - p1.x); ret = sqrt(ret); return ret; } int main() { Point p1(1, 2); Point p2(10, 20); printf("p1(%f, %f) ", p1.getX(), p1.getY()); printf("p2(%f, %f) ", p2.getX(), p2.getY()); printf("|(p1, p2)| = %f ", func(p1, p2)); return 0; }
友元的缺陷:
破坏了对象的封装性。