函数重载

 2023-05-04 11:10:05  阅读 0

在之前的学习中了解过函数,可以通过函数来实现特定的功能。但是有些时候,很多函数的功能是非常相似,若是给这些函数都起不同的名字在编写和使用的时候就会过于繁杂。因此,C++对此做出了函数重载的概念。

函数重载是在同一范围内允许函数的名字相同,但是这些同名的函数的参数列表不同。参数列表不同既包括参数类型不同,也包括参数的数量不同。如下:


 

在上面的代码中,存在两个同名函数,这两个函数的返回值类型不同,参数也不同。

在使用的时候,系统会根据用户输入的参数自动匹配最优的一个函数,当用户使用1,2作为参数的时候因为1,2都是int类型的值,所以系统会优先调用int类型参数的add函数。同样,对于1.1的数字,系统会优先调用double类型的参数的add函数

 

#include <iostream>
​
int add(int a1, int a2){
   int num = 0;
   num = a1 + a2;
   return num;
}
double add(double a1, double a2){
    double num = 0.0;
    num = a1 + a2;
    return num;
}
int main(){
    std::cout << add(1, 2) << std::endl;
    std::cout << add(1.1, 1.2) << std::endl;
    return 0;
}

 

 

但是,此时就会出现疑问。1,2不光可以作为int参数使用,也可以作为double参数使用。如果将用int作为参数类型的add去掉则系统会自动调用double类型的,否则就会优先调用int类型的。

之前介绍过,系统会自动调用最为匹配的参数函数调用,若是没有则会再匹配可以接受的参数使用。正因为这样,在上面的代码中若是不存在double参数类型的add,并且还使用了1.2作为参数,系统不会报错,而是会直接调用int参数类型的函数。此时,就会发生数据泄漏的问题,因此,编写者在编写代码的时候需要对这类问题做全面的考虑,防止出现这种内存丢失的情况。

 

函数重载不仅仅可以发生在全局中,还可以在类型存在,如下:

 

#include <iostream>
class Window{
public:
    void show(int num){
        std::cout << num << std::endl;
    }
    void show(double num){
        std::cout << num << std::endl;
    }
};
int main(){
    Window win;
    win.show(1);
    win.show(1.2);
    return 0;
}

 

 

在类中,依然可以使用函数重载来方便编写代码,依次让代码的使用更为简便。

标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码