C++语言程序设计

| 例5-27

#include <stdio.h>
void add(int val)
{
printf("Int: %d\n", val)
}
void add(long val)
{
printf("Int: %ld\n", val)
}
void main()
{
add(3.2); //调用发生歧异
}

编译器会由于无法决定将3.2转换成int还是long而产生调用发生歧异错误。
所谓函数重载是指同一个函数名可以对应着多个函数的实现。例如，可以给函数名add()定义多个函数实现，该函数的功能是求和，即求两个操作数的和。其中，一个函数实现是求两个int型数之和，另一个实现是求两个浮点型数之和。每种实现对应着一个函数体，这些函数的名字相同，但是函数参数的个数或类型不同，这就是函数重载的概念。
当调用多个同名的重载函数时，要求能够唯一地确定应执行哪一个函数，这是通过函数参数的个数和类型来区分的。所以，重载的函数要求参数个数或者参数类型上不同，否则会出现编译错误。下面是一个函数重载的例子，"int add(int i,int j)"函数实现整数的加法，"double add(double i,double j)"函数实现双精度浮点数的加法，它们的名字相同，仅仅是参数的类型不同，min函数的功能是在若干个整数中，求最小的整数，"int min(int a,int b)"、"int min(int a,int b,int c)"和"int min(int a,int b,int c,int d)"参数类型相同，仅仅是参数个数不同：