在编程时,一般是一个函数对应一种功能。但有时我们要实现的是同一类的功能,只是有些细节不同。例如希望从3个数中找出其中的最大数,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。程序设计者会分别设计出3个不同名的函数,其函数原型为
int max1(int a,int b, int c); //求3个整数中的最大数
double max2(double a,double b,double c); //求3个双精度数中的最大数
long max3(long a, long b, long c); //求3个长整数中的最大数
以上3个函数的函数体是相同的。程序要根据不同的数据类型调用不同名的函数。如果在一个程序中这类情况较多,对程序编写者来说,要分别编写出功能相同而名字不同的函数,这是很不方便的。有人自然会想:能否不用3个函数名而用一个统一的函数名呢?
C++允许用同一函数名定义多个函数,而这些函数的参数个数和参数类型可以不相同。这就是函数的重载(function overloading),即对一个函数名重新赋予它新的含义,使一个函数名可以多用。所谓重载,其实就是"一物多用"。以后可以看到,不仅函数可以重载,运算符也可以重载,例如,运算符"<<"和">>"既可以作为位移运算符,又可以作为输出流中的插入运算符和输入流中的提取运算符。
编写程序:
运行结果:
程序分析:
可以看到:我们用同一个函数名max分别定义了3个函数。那么,在调用时怎样决定选择哪个函数呢?系统会根据调用函数时给出的信息去找与之匹配的函数。上面的main函数3次调用max函数,而每次实参的类型不同。系统就根据实参的类型找到与之匹配的函数,然后调用该函数。
上例3个max函数的函数体是相同的,其实重载函数并不要求函数体相同。重载函数除了允许参数类型不同以外,还允许参数的个数不同。