1、友元是什么?
一句话:一种可以访问 private 权限的成员 的 方法
私有成员只能在类的成员函数内部访问,
如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行,这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦
友元可以看成是现实生活中的 好闺蜜 或者是 好基友
2、友元函数
友元函数可以直接访问类中的私有成员
#include<iostream>
using namespace std;
class Car {
private:
int num;
public:
Car(int num) {
this->num = num;
}
friend void test(Car c);
};
// 实现友元函数,函数内部可以直接访问私有成员
void test(Car bba) {
cout << bba.num << "\n"; // 正常情况下,是不能访问private修饰的私有成员,但是友元函数中可以使用
}
int main() {
Car bba(525);
test(bba);
return 0;
}
输出:525
3、友元类
一个类 A 可以将另一个类 B 声明为自己的友元,类 B 的所有成员函数就都可以访问类 A 对象的私有成员
#include<iostream>
using namespace std;
class Car {
private:
int num;
public:
friend class SSSS; // 声明 4S 为友元类
Car(int num) {
this->num = num;
}
void display_num() {
cout << "num=" << this->num << "\n";
}
};
class SSSS {
public:
void modify_car(Car *p) { // 改装汽车
p->num = 720;
}
};
int main() {
SSSS s4_shop;
Car bmw(525);
bmw.display_num();
s4_shop.modify_car(&bmw);
bmw.display_num();
return 0;
}