关于重载的概念和使用时的注意事项

来源:互联网 发布:淘宝秒杀助手官方下载 编辑:程序博客网 时间:2024/06/04 17:48

概念:两个以上的函数(方法),具有相同的函数(方法)名,但是形参的个数或者类型不同,在编译时,由编译器根据实参的类型和个数,自动确定调用哪一个函数,即为重载。

示例:

int add(int x,int y){         return x+y;}int add(int x,int y,int z){          return x+y+z;}float add(float x,float y){        return x+y;}float add(float x,float y,float z){               return x+y+z;}
以上函数(方法)任意组合,都能构成重载

重载是可以使函数、运算符等处理不同类型的数据或者接受不同个数的参数的一种方法。从某种意义上理解,重载相当于我们日常生活中的动词。比如“喝”,既可以表示喝水,也可以表示喝汤,还能表示喝奶,当我们听到“喝”这个词的时候就会通过对话的语境来判断喝的是什么;同样的道理,当编译器在碰到被重载的函数(方法)名时,也会根据上下文,即实参的类型或者个数去选择调用某个具体的函数(方法)。

使用时的注意事项:

(1)构成重载的函数(方法),形参的个数或类型至少要有一项是不同的,当然也可以都不相同。


(2)编译器不以形参名来区分函数(方法)。

int add(int x,int y);int add(int a,int b);
从本质上看,这实际是一个函数(方法)。

(3)编译器不以返回值来区分函数(方法)。

int add(int x,int y);void add(int x,int y);
这两个函数(方法)不能构成重载。
 

但是在形参的参数类型或个数不同的情况下,返回值可以相同也可以不相同,不会对重载造成影响。

int add(int x,int y);void add(float x,float y);
这是可以构成重载的。


(4)不要将不同功能的函数(方法)声明为重载函数(方法),以免混乱。也就是说,重载的函数(方法)在功能上应该是相近的(比如整型和浮点型数据的各自相加),而不应该把功能完全相反的函数(方法)用重载组合。

int add(int x,int y){return x+y;}folat add(float x,float y){return x+y;}
这是一个标准的重载例子

int compute(int a,int b){return a+b;}float compute(float a,float b){return a-b;}
这种写法在语法上并没有错误,但会给后续的编程带来麻烦,应该避免


(5)当使用具有默认形参值的函数(方法)重载的形式时,需要注意防止二义性。

void fun(int x,int y=2,int z=3);void fun(int x);
这样,在后续过程中,如果发生这样的调用fun(1);就会发生争议,使程序不能正常运行

以上是重载的一些常见的基本用法,供读者参阅。





1 0
原创粉丝点击