6.6 函数的重载
自然语言中,一个词可以有不同的含义,即该词被重载了,人们可以根据上下文的意思判断出该词的意义。在C++程序中,可以将语义及功能相似的几个函数用同一个名字来表示,这样便于记忆,提高了函数的易用性,称为函数重载。函数重载的示例见代码6.13。
图 6.3 函数递归过程图解
代码6.13 函数重载范例FunctionOverload1
<—————————————文件名:example613.cpp——————————————> 01 #include<iostream> 02 using namespace std; 03 int main() 01 { 02 void print(int);//函数声明 03 void print(char*);//函数声明 04 int m=1; 05 print(m);//函数调用,根据参数自动选择 06 char str[]="Hello"; 07 print(str);//函数调用,根据参数自动选择 08 return 0; 09 } 10 void print(int n)//print函数定义,参数为int型 11 { 12 cout<<"整数:"<<n<<endl; 13 } 14 void print(char*p)//print函数重载版本,参数为字符串 15 { 16 cout<<"字符串:"<<p<<endl; 17 }
输出结果如下所示。
整数:1 字符串:Hello
【代码解析】代码第10和第14行,分别定义了两个函数,函数名同为print,但函数的形参有所不同,一个是整型变量,另一个是字符指针,在main()函数对两个print函数进行调用时,编译器根据对print()函数传递的形参决定具体应调用哪个函数。
6.6.1 何时使用函数重载
将不相关的函数都用同样的名字来命名不是个明智的选择,会降低程序的可读性,使程序难以理解,因此,函数重载必须用在合适的场合。
首先,函数名应相同,最重要的一点是函数要完成的任务一样(至少是类似)。比如,都用来输出信息;或都用来和某个硬件打交道等,要避免函数名字相同,但功能完全不同的情形。
其次,形式参数的类型应不同,对于形参类型相同,只有形参个数不同的场合,就无须定义两个函数,采用前面提及的默认参数调用机制,只要定义一个函数即可。
但如果形参类型不同,默认参数调用便不再适用,此时,应使用函数重载。