编程语言
首页 > 编程语言> > C++友元函数friend

C++友元函数friend

作者:互联网

一.来源

下面是一个计算两点之间距离的方法。

#include <iostream >
#include <math.h>
class Point {
private:
	int x; 
	int y;
public:
	Point(int x, int y) {
		this->x = x;
		this->y = y;
	}
	int getX() {
		return x;
	}
	int getY() {
		return y;
	}
};
//计算两点之间距离
double distance(Point& p1, Point& p2) {
	int X = p1.getX() - p2.getX();//频繁使用getX()
	int Y = p1.getY() - p2.getY();//频繁使用getY()
	return sqrt(X*X+Y*Y);
}
using namespace std;
int main() {
	Point p1(1, 1), p2(2, 2);
	cout << distance(p1, p2);
}

可以发现,频繁的调用getX()、getY(),导致频繁的压栈出栈,浪费时间空间。
所以引出友元函数。
友元函数就是为了解决,方便某一个函数频繁使用类中变量。

二.使用

改写上面例子:

class Point {
private:
	int x; 
	int y;
public:
	Point(int x, int y) {
		this->x = x;
		this->y = y;
	}
	int getX() {
		return x;
	}
	int getY() {
		return y;
	}
	friend double distance(Point& p1, Point& p2);//友元函数
};
//计算两点之间距离
double distance(Point& p1, Point& p2) {
	int X = p1.x - p2.x;//改写
	int Y = p1.y - p2.y;//改写
	return sqrt(X*X+Y*Y);
}
using namespace std;
int main() {
	Point p1(1, 1), p2(2, 2);
	cout << distance(p1, p2);
}

通过增加函数一个声明,就可以在这个声明的函数内部,访问私有成员变量。

friend double distance(Point& p1, Point& p2);

三.问题

友元函数破坏了类的封装,一般不建议使用。

标签:友元,p2,p1,Point,int,C++,getX,getY,friend
来源: https://blog.csdn.net/weixin_44190648/article/details/122016458