• 【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )



    博客总结 :

    • 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;
    • 判定标准 : 只有 函数参数 的 个数 / 类型 / 顺序 的不同 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ;
    • 二义性 : 如果 函数重载 与 默认参数 结合使用 , 出现了二义性 , 编译直接失败 ;
    • 函数指针赋值重载函数 : 根据 函数指针 类型中的 参数列表类型 , 自动匹配 重载函数 ;




    一、函数指针定义方法



    先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;

    // 定义一个函数
    int add(int a, int b) {
    	return a + b;
    }
    
    • 1
    • 2
    • 3
    • 4

    1、直接定义函数指针


    按照下面的 函数指针 语法 , 定义函数指针 ;


    " 函数指针 " 定义语法 :

    return_type (*func_ptr)(parameter_list);
    
    • 1
    • return_type : 函数指针 指向的函数 的 返回值类型 ;
    • func_ptr : 函数指针 名称 , 使用该 名称 也可以调用函数 , 用法与函数名相同 ;
    • parameter_list : 函数指针 指向函数 的 参数列表 ;

    直接使用 函数指针 定义语法 , 定义 函数指针 ;

    	// 直接定义 函数指针
    	int (*func3)(int a, int b) = add;
    
    • 1
    • 2

    2、通过 函数类型 定义 函数指针


    首先 , 使用 typedef 关键字 , 定义 函数类型 , 下面的代码 定义了 函数类型 func , 函数的 参数列表是 2 个 int 参数 , 返回值是 int ;

    // 定义函数类型 func , 参数列表是 2 个 int 参数 , 返回值是 int
    typedef int (func)(int a, int b);
    
    • 1
    • 2

    然后 , 通过定义的 func 函数类型 , 定义函数指针 , 直接根据指针的定义语法 指针类型* 指针名称 定义函数指针 , 同时将 add 函数 的 地址 赋值给 函数指针 ;

    	// 根据 函数类型 定义 函数指针
    	func* func1 = add;
    
    • 1
    • 2

    3、通过 函数指针类型 定义 函数指针


    首先 , 通过 typedef 关键字, 定义 函数指针 类型 , 类型名称为 func_ptr , 对应的函数的 参数列表是 2 个 int 参数 , 返回值是 int ;

    // 定义函数指针类型 func_ptr , 参数列表是 2 个 int 参数 , 返回值是 int
    typedef int (*func_ptr)(int a, int b);
    
    • 1
    • 2

    然后 , 通过 func_ptr 函数指针类型 , 定义 函数指针 , 直接使用 变量类型 变量名称 的方式定义 函数指针 ;

    	// 根据 函数指针类型 定义 函数指针
    	func_ptr func2 = add;
    
    • 1
    • 2

    4、代码示例 - 不同方式定义函数指针


    在下面的代码中 , 分别使用上述章节中讲解的三种方式 , 定义了函数指针 ;


    代码示例 :

    // 包含 C++ 头文件
    #include "iostream"
    
    // 使用 std 标准命名空间
    //		该命名空间中 , 定义了很多标准定义
    using namespace std;
    
    // 定义函数类型 func , 参数列表是 2 个 int 参数 , 返回值是 int
    typedef int (func)(int a, int b);
    
    // 定义函数指针类型 func , 参数列表是 2 个 int 参数 , 返回值是 int
    typedef int (*func_ptr)(int a, int b);
    
    // 定义一个函数
    int add(int a, int b) {
    	return a + b;
    }
    
    int main()
    {
    	// 根据 函数类型 定义 函数指针
    	func* func1 = add;
    
    	// 根据 函数指针类型 定义 函数指针
    	func_ptr func2 = add;
    
    	// 直接定义 函数指针
    	int (*func3)(int a, int b) = add;
    
    	// 打印 调用结果 
    	cout << "func1(1, 2) = " << func1(1, 2)
    		<< " , func2(1, 2) = " << func2(1, 2)
    		<< " , func3(1, 2) = " << func3(1, 2) << endl;
    
    	// 控制台暂停 , 按任意键继续向后执行
    	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
    • 36
    • 37
    • 38

    执行结果 : 三种方式定义的函数指针都成功

    func1(1, 2) = 3 , func2(1, 2) = 3 , func3(1, 2) = 3
    Press any key to continue . . .
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    openmmlab教程2-MMCV使用
    跳石板(牛客)
    js 什么时候必须使用[‘属性名‘] 的方式??
    小学生python游戏编程arcade----原码分析
    java计算机毕业设计springboot+vue在线选课系统
    『忘了再学』Shell基础 — 16、位置参数变量
    记录:Unity脚本的编写5.0
    ROS2与turtlebot4仿真入门教程-安装ROS2
    Word Game
    制作一个简单HTML传统端午节日网页(HTML+CSS)7页 带报告
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132721930