
⚡ CYBER_PROFILE ⚡
/// SYSTEM READY ///
WARNING \]: DETECTING HIGH ENERGY
**🌊 🌉 🌊 心手合一 · 水到渠成**

|------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
| **\>\>\> ACCESS TERMINAL \<\<\<** ||
| [**\[ 🦾 作者主页 \]**](https://blog.csdn.net/fengtinghuqu520?spm=1000.2115.3001.5343) | [**\[ 🔥 C语言核心 \]**](https://blog.csdn.net/fengtinghuqu520/category_12955956.html) |
| [**\[ 💾 编程百度 \]**](https://blog.csdn.net/fengtinghuqu520/category_13083835.html) | [**\[ 📡 代码仓库 \]**](https://blog.csdn.net/fengtinghuqu520/article/details/147275999?spm=1001.2014.3001.5502) |
---------------------------------------
Running Process: 100% \| Latency: 0ms
*** ** * ** ***
#### 索引与导读
* [友元函数](#友元函数)
*
* [友元函数的出现缘由](#友元函数的出现缘由)
* [友元函数的基本定义](#友元函数的基本定义)
*
* [1)friend 关键字](#1)friend 关键字)
* [2)函数返回类型 (returnType)](#2)函数返回类型 (returnType))
* [3)函数名 (functionName)](#3)函数名 (functionName))
* [4)参数列表 (parameters)](#4)参数列表 (parameters))
*
* [4.1)传值](#4.1)传值)
* [4.2)传引用](#4.2)传引用)
* [4.3)传常量引用](#4.3)传常量引用)
* [4.4)传指针](#4.4)传指针)
* [4.5)多个参数](#4.5)多个参数)
* [4.6)带默认参数](#4.6)带默认参数)
* [友元函数的特点](#友元函数的特点)
* [友元类](#友元类)
*
* [1)基本定义](#1)基本定义)
* [2)友元关系(友元类)的特性](#2)友元关系(友元类)的特性)
* [💻结尾--- 核心连接协议](#💻结尾— 核心连接协议)
## 友元函数
### 友元函数的出现缘由
* `C++`的封装性将数据隐藏在类内部,但有时外部函数需要直接访问类的私有成员
🚩友元函数解决了这一矛盾
* 当外部函数需要频繁访问类的私有数据时,通过公有接口(`getter/setter`)会产生函数调用开销,友元函数可以直接访问,效率更高
* 某些操作符(如`<<`、`>>`)必须作为非成员函数重载,但又需要访问私有成员
* 当两个或多个类需要共享数据,但这些类之间没有继承关系时,友元函数可以作为桥梁
*** ** * ** ***
### 友元函数的基本定义
```cpp
class ClassName {
private:
// 私有成员
public:
// 声明友元函数
friend returnType functionName(parameters);
};
```
#### 1)friend 关键字
**╔═█▓▒░ CODE CORE 🔥**
**┌─────────────┐
│ `friend`关键字 │`friend returnType functionName(parameters);`
└─────────────┘**
* `friend` 是一个关键字,表示后面声明的是友元函数
* 只在**类内部声明时**使用,在函数定义时不需要
* 友元关系是授予的,不是索取来的
#### 2)函数返回类型 (returnType)
```cpp
friend void functionName(); // 无返回值
friend int functionName(); // 返回int
friend MyClass functionName(); // 返回自定义类型
friend const string& functionName(); // 返回常量引用
friend auto functionName(); // C++14起可用auto
```
#### 3)函数名 (functionName)
```cpp
// 可以是普通函数
friend void printData(const ClassName& obj);
// 可以是操作符函数
friend ostream& operator<<(ostream& os, const ClassName& obj);
// 可以是模板函数
template