博客总结 :

  • 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;
  • 判定标准 : 只有 函数参数 的 个数 / 类型 / 顺序 的不同 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;




一、函数重载




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
打印两个整数: 23
打印浮点数: 1.5
Press any key to continue . . .

【C++】函数重载 ① ( 函数重载概念 | 函数重载判断标准 - 参数个数 / 类型 / 顺序 | 返回值不是函数重载判定标准 )-LMLPHP


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++】函数重载 ① ( 函数重载概念 | 函数重载判断标准 - 参数个数 / 类型 / 顺序 | 返回值不是函数重载判定标准 )-LMLPHP


错误代码示例 :

// 包含 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==========

【C++】函数重载 ① ( 函数重载概念 | 函数重载判断标准 - 参数个数 / 类型 / 顺序 | 返回值不是函数重载判定标准 )-LMLPHP

09-06 17:39