在C++的类中,我们可以对其成员和行为进行属性的设置。
但是,有的时候,因为类的私有成员无法在外部访问的问题导致为其设置私有成员的时候较为麻烦。所以,C++提供了友元函数的概念。友元函数是一个全局函数,但是可以写在类中,这样就可以做到通过全局函数直接访问类中私有成员的目的。
具体使用如下:
#include <iostream>
using namespace std;
class Rect {
private:
int width;
int height;
public:
Rect();
~Rect();
friend void show(const Rect& rect);//友元函数(在函数前面加上friend关键字即可)
};
int main() {
Rect rect;
show(rect);
return 0;
}
Rect::Rect() : width(100), height(100) {
cout << "数据初始化成功" << endl;
}
Rect::~Rect() {
cout << "调用结束" << endl;
}
void show(const Rect& rect) {
cout << rect.width << endl;
}
如上,将一个Rect类传入友元函数show中,就可以在友元函数中直接访问Rect属性中的私有成员。但是可以访问私有成员并不意味着可以直接在友元函数中,不传入参数也能够直接访问类中的成员。
友元函数在实质上是一个全局函数,因此,在没有传入参数的前提下是无法直接访问类中的属性和行为的。其次,因为友元函数为全局函数的关系,在申明和定义分开时,定义不需要使用类名做出限定,在使用的时候也是作为全局函数直接访问。
类的特点之一就是封装,但是友元的使用在一定程度上破坏了封装。所以使用者的使用的时候需要注意,能够不使用友元就不使用友元。