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



    博客总结 :

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




    一、函数重载




    1、函数重载概念


    C++ 中 " 函数重载 " 概念 :

    • 使用 相同 的 函数名 , 定义 不同 的 函数 ;
    • 函数名 相同 , 参数列表 的 参数顺序 或 参数类型 不同 ;

    注意 : 只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;


    2、函数重载判断标准


    " 函数重载 " 满足的条件 ( 判断标准 ) :

    • 参数 " 个数 " 不同
    • 参数 " 类型 " 不同
    • 参数 " 顺序 " 不同

    只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;





    二、代码示例




    1、代码示例 - 函数重载


    在下面的代码中 , 定义了 3 个 fun 函数 , 都是重载函数 ;

    第 1 个 fun 函数 , 接收一个 int 整型参数 ;

    // 函数1 : 接收一个整数参数  
    void fun(int i) {
    	cout << "打印整数: " << i << endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    第 2 个 fun 函数 , 接收 2 个 int 类型参数 ; 该 重载函数 与 第 1 个 函数 , 参数个数不同 ;

    // 函数2 : 接收两个整数参数  
    void fun(int i, int j) {
    	cout << "打印两个整数: " << i << " 和 " << j << endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    第 3 个 fun 函数 , 接收 1 个 float 浮点类型参数 , 该 重载函数 与 第 1 个函数 , 参数类型不同 , 与 第 2 个函数 , 参数 类型 和 个数 都不同 ;

    // 函数3 : 接收一个浮点数参数  
    void fun(float f) {
    	cout << "打印浮点数: " << f <<endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    调用函数时 , 根据 传入 的参数的不同 , 判定 调用的是 哪个 重载函数 ;

    传入 实参 4 , 参数类型是 1 个 int 类型 , 调用的是 第 1 个重载函数 ;

    fun(4);				// 调用第一个 fun 函数  
    
    • 1

    传入 实参 2, 3 , 参数类型是 2 个 int 类型 , 调用的是 第 2 个重载函数 ;

    fun(2, 3);			// 调用第二个 fun 函数  
    
    • 1

    传入 实参 1.5f , 参数类型是 1 个 float 类型 , 调用的是 第 3 个重载函数 ;

    fun(1.5f);          // 调用第三个 fun 函数  
    
    • 1

    代码示例 :

    // 包含 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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    执行结果 :

    打印整数: 4
    打印两个整数: 23
    打印浮点数: 1.5
    Press any key to continue . . .
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述


    2、代码示例 - 返回值不是函数重载判定标准


    只有 函数参数 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;

    因此 , 如果两个函数 , 参数列表相同 , 返回值不同 , 此时就会在编译时报错 , 程序无法运行 ;


    定义了 函数 1 , void fun(int i) , 接收一个整数 int 类型参数 , 返回 void 返回值 ;

    // 函数1 : 接收一个整数参数 , 返回 void 空
    void fun(int i) {
    	cout << "打印整数: " << i << endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    之后 , 再定义 函数 2 , int fun(int i) , 接收一个整数参数 , 返回 int 类型返回值 , 函数 2 直接与 函数 1 发生了冲突 , 编译时 , 会报错 ;

    // 函数2 : 接收一个整数参数 , 返回 int 类型返回值 
    int fun(int i) {
    	cout << "打印整数: " << i << endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果使用 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    执行结果 :

    已启动生成…
    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==========
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

  • 相关阅读:
    NodeJs实战-Express构建照片存储网站(1)-ejs视图引擎填充数据
    QT--线程
    java实现html转pdf(node+puppeteer)
    利用Jpom在线构建Spring Boot项目
    猿创征文|基于Java+SpringBoot+vue学生学习平台详细设计实现
    spring mvc中如何使用log4j.properties配置log4j呢?
    SpringBoot和Vue实现用户个人信息展示与保存与集成JWT——基于SpringBoot和Vue的后台管理系统项目系列博客(十四)
    恶意代码防范技术笔记(七)
    web网页设计期末课程大作业 HTML+CSS+JavaScript 美食餐饮文化主题网站设计 学生DW静态网页设计
    CorelDraw2024(CDR)- 矢量图制作软件介绍
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132698434