
高贵的衬衫
07-30 15:28
C++
C++
# 一、函数重载
```mermaid
flowchart LR
id1[(<font color=#</font>函数重载)]
```
>自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。
比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!"
## 1.1.函数重载概念
***==函数重载==***:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题
```mermaid
flowchart LR
id1><font color=#FFF0</font>1. 参数类型不同]
```
```cpp
#include<iostream>
using namespace std;
int Add(int left, int right)
{
cout << "int Add(int left, int right)" << endl;
return left + right;
}
double Add(double left, double right)
{
cout << "double Add(double left, double right)" << endl;
return left + right;
}
int main()
{
cout << Add(1, 2) << endl;
cout << Add(1.1, 2.2) << endl;
return 0;
}
```
```mermaid
flowchart TD
id1[\<font color=#FFD700</font>类型不同:一个整形一个浮点型但是函数名相同C++会自动匹配类型C却不能\]
```
```mermaid
flowchart LR
id1><font color=#FFF0</font>2. 参数个数不同]
```
```cpp
#include<iostream>
using namespace std;
void f()
{
cout << "f()" << endl;
}
void f(int a)
{
cout << "f(int a)" << endl;
}
int main()
{
f();
f(10);
return 0;
}
```
```mermaid
flowchart LR
id1><font color=#FFF0</font>3. 参数类型顺序不同]
```
```cpp
#include<iostream>
using namespace std;
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}
int main()
{
f(10, 'a');
f('a', 10);
return 0;
}
```
```mermaid
flowchart LR
id1[[<font color=#</font>注意:是参数类型的顺序不同不是形参的名字不同]]
```
```cpp
#include<iostream>
using namespace std;
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(int b, char a)
{
cout << "f(int b, char a)" << endl;
}
```
>
```mermaid
flowchart LR
id1[[<font color=#</font>注意:返回值不同不能构成重载]]
```
```cpp
#include<iostream>
using namespace std;
void f(char a, int b)
{
cout << "f(int a,char b)" << endl;
}
int f(char a, int b)
{
cout << "f(int a, char b)" << endl;
}
int main()
{
return 0;
}
```
>
```mermaid
flowchart LR
id1><font color=#FFF0</font>4. 重载与缺省参数的碰撞擦出的火花]
```
```cpp
#include<iostream>
using namespace std;
//构成函数重载
void func(int a)
{
cout << "void func(int a)" << endl;
}
void func(int a, int b = 1)
{
cout << "void func(int a,int b)" << endl;
}
int main()
{
func(1,2);
//调用存在歧义
func(10);
return 0;
}
```
>重载和缺省参数碰撞是==可以构成重载的(参数个数不同)==,但是==会出现调用歧义(当调用func(1,2)是不会出现问题的,但是调用func(10),编译器就不知道调用哪个因为两个都符合调用)==
## 1.2.C++支持函数重载的原理 -- 名字修饰
```mermaid
flowchart TD
id1[\<font color=#FFD700</font>为什么C++支持函数重载,而C语言不支持函数重载呢\]
``
Comments0
Creator