• C++ 函数重载


    1. 什么是函数重载
    现在我们定义了一个交换值的函数,如下:

    #include <iostream>
    using namespace std;
    
    void swap(int *A, int *B){
        int temp = *A;
        *A = *B;
        *B = temp;
    }
    
    int main(){
       int a = 10, b = 20;
       swap(&a,&b);
       cout<<a<<"  "<<b<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    这个函数的形参类型是int型,那么我们想交换其他类型变量的时候,我们就需要重新定义一个void swap2(float *A, float *B)void swap3(char *A, char *B)等等,需要定义多个函数,但是这些函数的功能却又是相近的,于是伟大的程序员想到了将这些函数的名字统一,而且保持其功能不变,这就是函数重载。

    函数重载会出现多个同名函数,他们的区别在于函数形参的设置,比如:

    #include <iostream>
    using namespace std;
    void swap(int *A, int *B){
        int temp = *A;
        *A = *B;
        *B = temp;
    }
    void swap(float *A, float *B){
        float temp = *A;
        *A = *B;
        *B = temp;
    }
    void swap(char *A, char *B , int len){
        char temp;
        for (int i = 0; i < len; i++){
            temp = A[i];
            A[i] = B[i];
            B[i] = temp;
        }
    }
    int main(){
       int a1 = 10, b1 = 20;
       swap(&a1,&b1);
       cout<<a1<<"  "<<b1<<endl;
    
       float a2 = 10.1, b2 = 20.1;
       swap(&a2,&b2);
       cout<<a2<<"  "<<b2<<endl;
    
       char a3[] = "asd", b3[] = "zxc";
       swap(a3,b3,3);
       cout<<a3<<"  "<<b3<<endl;
    }
    
    • 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

    于是,仅用一个函数就可以实现多种类型数据的交换,函数调用的时候,编译器根据输入参数的不同,判断要选择哪一个函数。

    依我之见,函数重载只是为了使命名变得方便,因为这个三个函数,对编译器而言,依然是三个完全不同的函数,在进行编译之后,函数名会分别标记为_swap_int_int__swap_float _float __swap_char_char_(只是举个例子)。因此重载函数只是为了程序员自己方便,对编译器来说没有区别。

    2. 函数重载的注意事项
    ① 函数名必须相同;
    ②输入形参必须有区别(类型、数量、顺序);
    ③输出类型不作为函数重载的依据;
    ④函数重载要尽可能包含要用到的类型,否则可能产生二义性;换句话讲,就是尽量不要输入没有重载的形参类型;
    ⑤函数重载只是方便我们的程序开发,对计算机来说依然是多个不同的函数。

  • 相关阅读:
    CEPH 系统盘挂了,如何使用数据盘恢复
    ChatGPT成知名度最高生成式AI产品,使用频率却不高
    SpringSecurity基础:SecurityContext对象
    通达OA v12流程中心
    何登骥获“两优一先”荣誉 谋定·国稻种芯: 湖南农业科学院表彰
    CAD渲染如何选择合适的电脑配置?
    VUE3 博客全栈-前端-07
    数据结构与算法———力扣977——双指针——python
    系统架构设计高级技能 · 软件产品线
    mysql数据常见类型
  • 原文地址:https://blog.csdn.net/a1367666195/article/details/125626482