【共读Primer】53.[6.4]函数重载 Page207
在同一个作用域内,几个函数名字相同但形参列表不同,我们成为重载(voerloaded)函数。
void print(const char *cp); void print(const int *beg, const int*end); void print(const int ia[], size_t size); int j[2] = {0, 1} print("Hello World"); print(j , end(j) - begin(j)); print(begin(j) - end(j));
在上面的重载函数中,编译器将通过实参的类型和数量进行调用实际函数的选择。
PS: main函数不能被重载
定义重载函数
函数的重载必须在参数数量或参数类型上有差异,返回值的差异不计入重载条件
// 下面的重载正确,参数类型不同 Record lookup(const Account&); Record lookup(const Phone&); Record lookup(const Name&); // 下面的重载不成立, 只有返回值不同,但是返回值不计入重载条件 Record lookup(const Account&); bool lookup(const Account&); // 下面两个函数重载不成立,类型没有变化,只是省略了形参名称 Record lookup(const Account &acct); Record lookup(const Account &); // 下面的两个函数重载不成立,实际是一个类型 typedef Phone Telno; Record lookup(const Phone&); Record lookup(const Telno&);
重载和const形参
在含有const和不含有const的重载中,编译器依然会根据具体的参数类型来选择需要调用的函数。
关于重载的一些建议
一般来说我们会将重载运用在运行过程相似或一致的情况下,使用重载来表示,因为这样不会使调用者产生疑惑。