在同一个作用域内,几个函数名字相同但形参列表不同,我们成为重载(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的重载中,编译器依然会根据具体的参数类型来选择需要调用的函数。

 

关于重载的一些建议

一般来说我们会将重载运用在运行过程相似或一致的情况下,使用重载来表示,因为这样不会使调用者产生疑惑。

 

版权声明:本文为ChattyKu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ChattyKu/p/9608218.html