为方便使用,在一定范围内,c++可以定义多个功能形似的同名函数,但是这些函数的形参必须不同(类型、个数、顺序),这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。
看下面的一个例子,来体会一下:实现一个打印函数,既可以打印int型、也可以打印字符串型。在C++中,我们可以这样做:
#include<iostream> using namespace std; void print(int i) { cout<<"print a integer :"<<i<<endl; } void print(string str) { cout<<"print a string :"<<str<<endl; } int main() { print(12); print("hello world!"); return 0;
两个重载函数必须在下列一个或两个方面有所区别:
1、函数有不同参数。
2、函数有不同参数类型,
编译器如何判断调用的是哪个函数?
假如有如下函数:
void S(); void S(int); void S(double,double=1.2); void S(constchar*,constchar*); void Max(int,int); //…… intmain() { S(2.4); return; } //S(2.4);的调用与S();S(int);S(double,double=1.2);S(constchar*,constchar*),的声明在同一域,即是可见的。
当调用s(2.4)时,编译器的判断分为两步:
一、确定候选函数——同名函数; //该例中第一步将Max(int,int)排除
二、1、确定可行函数——参数个数相同[如S ( int )],或者可行函数的参数可以多一些,但是多出来的函数参数都要有相关的缺省值(如 S (double , double =1.2 );)
2、第二个动作是根据参数类型的转换规则将被调用的函数实参转换(conversion)成候选函数的实参;