C/C++教程

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);

三.问题

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

这篇关于C++友元函数friend的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!