C++函数重载

举报
用户已注销 发表于 2021/11/19 01:43:32 2021/11/19
【摘要】 1,函数重载 函数重载是一种泛型设计,c语言和python都不支持,c++支持 2,普通函数重载 函数签名由函数名和函数参数组成,和返回值无关。 签名相同的函数放一起会造成符号冲突,无法编译: 如果两个同名函数的签名不同(即参数不同),那么就可以重载: void f(int x){ cout << x ...

1,函数重载

函数重载是一种泛型设计,c语言和python都不支持,c++支持

2,普通函数重载

函数签名由函数名和函数参数组成,和返回值无关。

签名相同的函数放一起会造成符号冲突,无法编译:

如果两个同名函数的签名不同(即参数不同),那么就可以重载:


  
  1. void f(int x)
  2. {
  3. cout << x << " ";
  4. }
  5. void f(double x)
  6. {
  7. cout << x << " ";
  8. }
  9. string f(string s)
  10. {
  11. return "";
  12. }
  13. int main()
  14. {
  15. f(1);
  16. f(1.2);
  17. f("");
  18. return 0;
  19. }

3,重载歧义


  
  1. #include<iostream>
  2. using namespace std;
  3. void f(float x)
  4. {
  5. cout << x << " ";
  6. }
  7. void f(double x)
  8. {
  9. cout << x+1 << " ";
  10. }
  11. int main()
  12. {
  13. //f(1)
  14. f(float(1));
  15. f(double(1));
  16. f(1.0);
  17. return 0;
  18. }

float和double都是实数类型,如果参数是1,那么无法自动推导类型,编译失败。

如果指明了1的类型,或者入参是1.0,那么可以推导出类型。


  
  1. #include<iostream>
  2. using namespace std;
  3. void f(int x,double y)
  4. {
  5. cout << x << " ";
  6. }
  7. void f(double x,int y)
  8. {
  9. cout << x+1 << " ";
  10. }
  11. int main()
  12. {
  13. //f(1, 2);
  14. f(1.0, 2);
  15. //f(1, int(2));
  16. f(1, double(2));
  17. return 0;
  18. }

类似的,在这个代码中,f(1,2)也有重载歧义,如果只把2指明为int还是不行,指明为double才没有歧义。

4,类成员函数重载

类的成员函数,重载规则和普通函数一致。

构造函数也可以重载,析构函数不能重载。

 

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/nameofcsdn/article/details/117407008

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。