什么是函数重载? | 您所在的位置:网站首页 › 函数重载有几种形式 › 什么是函数重载? |
前言 函数重载是 C++ 编程的一个特性,它允许我们有多个具有相同名称但不同参数列表的函数,当我说参数列表时,它表示参数的数据类型和顺序,例如函数myfuncn(int a, float b)的参数列表是(int, float),它与函数myfuncn(float a, int b)参数列表(float, int)不同。函数重载是编译时多态。 重载规则 现在我们知道什么是参数列表,让我们看一下重载规则:我们可以在同一范围内拥有以下函数。 print(int num1, int num2) print(int num1, int num2, int num3) print(int num1, double num2)记住这条规则的最简单方法是参数应符合以下任何一个或多个条件,它们应具有不同的类型,数量或顺序的参数。 例如: 这两个函数有不同的参数类型: print(int num1, int num2) print(double num1, double num2)这两个的参数数量不同: print(int num1, int num2) print(int num1, int num2, int num3)这两个有不同的参数顺序: print(int num1, double num2) print(double num1, int num2)以上三种情况都是有效的重载情况。我们可以有任意数量的函数,只需记住参数列表应该是不同的。例如: int print(int, int) double print(int, int)由于参数列表相同,因此不允许这样做。尽管它们具有不同的返回类型,但它无效。 函数重载例1 函数重载指的是一个作用域内的几个函数名字相同但是形参列表不同。 #include #include using namespace std; class Test { public: void print(int i) { cout cout public: int print(int i) { return i; } double print(double d) { return d; } }; int main(int argc, char const *argv[]) { DemoClass obj; cout int c; }; void print(const TEST1&) { cout TEST1 test1; TEST1 test2; print(test1); return 0; }如果在调用重载函数时候,我们需要使用构造函数或者强制类型转换来改变实参类型。避免二义性发生。 C++ 有哪些函数不能重载 析构函数不能重载 ,因为析构函数只能有一个,且不能带参数。析构函数是系统自动调用的,是没有参数表的 。 main函数不能重载 这是在C++ 11标准中说明的: A program shall contain a global function called main, which is the designated start of the program.... This function shall not be overloaded.试想如果作为用户程序入口函数的main函数被重载了,那么加载的时候该以哪个为入口呢? 重载函数返回值不同、形参名不同都是不能重载的 double print(const A&); int print(const A&);编译会出错,仅有返回值不同是不可以重载的 int print(const A&test1); int print(const A&test2);编译会出错,仅仅是形参名不同,不可以重载。同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。 总结 函数重载是在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。不能仅通过返回类型的不同来重载函数。 欢迎关注公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料,网盘资料有如下: |
CopyRight 2018-2019 实验室设备网 版权所有 |