文章目录
- 一、函数重载
- 1、函数重载概念
- 2、函数重载判断标准
- 二、代码示例
- 1、代码示例 - 函数重载
- 2、代码示例 - 返回值不是函数重载判定标准
博客总结 :
- 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;
- 判定标准 : 只有 函数参数 的 个数 / 类型 / 顺序 的不同 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;
一、函数重载
1、函数重载概念
C++ 中 " 函数重载 " 概念 :
- 使用 相同 的 函数名 , 定义 不同 的 函数 ;
- 函数名 相同 , 参数列表 的 参数顺序 或 参数类型 不同 ;
注意 : 只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;
2、函数重载判断标准
" 函数重载 " 满足的条件 ( 判断标准 ) :
- 参数 " 个数 " 不同
- 参数 " 类型 " 不同
- 参数 " 顺序 " 不同
只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;
二、代码示例
1、代码示例 - 函数重载
在下面的代码中 , 定义了 3 个 fun 函数 , 都是重载函数 ;
第 1 个 fun 函数 , 接收一个 int 整型参数 ;
// 函数1 : 接收一个整数参数
void fun(int i) {
cout << "打印整数: " << i << endl;
}
第 2 个 fun 函数 , 接收 2 个 int 类型参数 ; 该 重载函数 与 第 1 个 函数 , 参数个数不同 ;
// 函数2 : 接收两个整数参数
void fun(int i, int j) {
cout << "打印两个整数: " << i << " 和 " << j << endl;
}
第 3 个 fun 函数 , 接收 1 个 float 浮点类型参数 , 该 重载函数 与 第 1 个函数 , 参数类型不同 , 与 第 2 个函数 , 参数 类型 和 个数 都不同 ;
// 函数3 : 接收一个浮点数参数
void fun(float f) {
cout << "打印浮点数: " << f <<endl;
}
调用函数时 , 根据 传入 的参数的不同 , 判定 调用的是 哪个 重载函数 ;
传入 实参 4 , 参数类型是 1 个 int 类型 , 调用的是 第 1 个重载函数 ;
fun(4); // 调用第一个 fun 函数
传入 实参 2, 3 , 参数类型是 2 个 int 类型 , 调用的是 第 2 个重载函数 ;
fun(2, 3); // 调用第二个 fun 函数
传入 实参 1.5f , 参数类型是 1 个 float 类型 , 调用的是 第 3 个重载函数 ;
fun(1.5f); // 调用第三个 fun 函数
代码示例 :
// 包含 C++ 头文件
#include "iostream"
// 使用 std 标准命名空间
// 该命名空间中 , 定义了很多标准定义
using namespace std;
// 函数重载示例
// 函数1 : 接收一个整数参数
void fun(int i) {
cout << "打印整数: " << i << endl;
}
// 函数2 : 接收两个整数参数
void fun(int i, int j) {
cout << "打印两个整数: " << i << " 和 " << j << endl;
}
// 函数3 : 接收一个浮点数参数
void fun(float f) {
cout << "打印浮点数: " << f <<endl;
}
int main()
{
fun(4); // 调用第一个 fun 函数
fun(2, 3); // 调用第二个 fun 函数
fun(1.5f); // 调用第三个 fun 函数
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
打印整数: 4
打印两个整数: 2 和 3
打印浮点数: 1.5
Press any key to continue . . .
2、代码示例 - 返回值不是函数重载判定标准
只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;
因此 , 如果两个函数 , 参数列表相同 , 返回值不同 , 此时就会在编译时报错 , 程序无法运行 ;
定义了 函数 1 , void fun(int i) , 接收一个整数 int 类型参数 , 返回 void 返回值 ;
// 函数1 : 接收一个整数参数 , 返回 void 空
void fun(int i) {
cout << "打印整数: " << i << endl;
}
之后 , 再定义 函数 2 , int fun(int i) , 接收一个整数参数 , 返回 int 类型返回值 , 函数 2 直接与 函数 1 发生了冲突 , 编译时 , 会报错 ;
// 函数2 : 接收一个整数参数 , 返回 int 类型返回值
int fun(int i) {
cout << "打印整数: " << i << endl;
return 0;
}
如果使用 IDE 工具 , 如 Visual Studio 2019 , 代码写完就会报错 ;
错误代码示例 :
// 包含 C++ 头文件
#include "iostream"
// 使用 std 标准命名空间
// 该命名空间中 , 定义了很多标准定义
using namespace std;
// 函数重载示例
// 函数1 : 接收一个整数参数 , 返回 void 空
void fun(int i) {
cout << "打印整数: " << i << endl;
}
// 函数2 : 接收一个整数参数 , 返回 int 类型返回值
int fun(int i) {
cout << "打印整数: " << i << endl;
return 0;
}
int main()
{
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
已启动生成…
1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>hello_world.cpp
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(16,16): error C2556: “int fun(int)”: 重载函数与“void fun(int)”只是在返回类型上不同
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(11): message : 参见“fun”的声明
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(16,5): error C2371: “fun”: 重定义;不同的基类型
1>D:\002_Project\006_Visual_Studio\HelloWorld\HelloWorld\hello_world.cpp(11): message : 参见“fun”的声明
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========