函数重载

维基百科,自由的百科全书
跳到导航 跳到搜索

函数重载(英語:Function overloading),是AdaC++C#、D和Java编程语言中具有的一项特性,这项特性允许创建数项名称相同但输入输出类型或个数不同的子程序,它可以简单地称为一个单独功能可以执行多项任务的能力。

函数重载规律[编辑]

Java中的函数重载[编辑]

Java支持函数重载。当多个同名函数的形式参数的数据类型不同或数量不同时,就构成了函数的重载。[1][2]

 1 public class Test{
 2     public void A(){                //这是一个无形式参数名称为A的函数。
 3         
 4     }
 5     public void A(int a){           //这个函数有一个数据类型为int的函数,函数数目不同,故构成重载。
 6         
 7     }
 8     public void A(String a){        //这个函数数据类型为String,形式参数的数据类型不同,故构成重载。
 9         
10     }
11     public void A(int a,int b){     //这个函数有两个形式参数,故构成重载。
12         
13     }
14     public int (int a,String b){    //这个函数的第二个形式参数的数据类型与上一个函数的数据类型不同,故构成重载。
15         /*
16         重载的函数的返回值可以不同,但是如果两个或多个函数只有返回值不同,不足以构成重载。
17         */
18     }
19 }

构造器重载[编辑]

Java[编辑]

Java中的构造器可以重载,重载方式与普通函数的重载方法一样,唯一不同的就是返回值不可以更改。[3]

注意事项[编辑]

对于名字屏蔽英语name masking,C++规定不存在跨作用域(scope)的名字重载。即内层作用域的函数名字将屏蔽掉外层作用域的同名函数名字。

C++子类型的成员函数名将屏蔽其基类型的同名成员函数名,即被继承类与派生类的同名成员函数名不构成函数名重载。除非在子类型中用using关键字显式引入基类型的成员函数名。

class B {
public:
    void f(int i);
};
 
class D : public B {
public:
    using B::f;
    void f(double d);
};

class B {
public:
    void f(int i);
};
 
class D : public B {
public:
    using B::f;
    void f(double d);
};

另见[编辑]

参考[编辑]

  1. ^ Java 实例 - 方法重载 菜鸟教程. www.runoob.com. [2018-08-09]. 
  2. ^ Java如何重载方法? - Java代码实例™. www.yiibai.com. [2018-08-09]. 
  3. ^ Java 重载、重写、构造函数的实例详解_java_脚本之家. www.jb51.net. [2018-08-09] (中文(中国大陆)‎). 

外部链接[编辑]

  • Bertrand Meyer: Overloading vs Object Technology, in Journal of Object-Oriented Programming (JOOP), vol. 14, no. 4, October-November 2001, available online