
点击蓝字 关注我们

第八节 函数重载

函数重载是指在同一个作用域内声明多个具有相同名称但不同参数列表(包括参数的个数、类型或顺序)的函数。通过函数重载,可以使用相同的函数名来表示具有不同功能的函数。
以下是一个简单的函数重载的例子:
#include <iostream>using namespace std;// 函数重载:两个整数相加int add(int a, int b) {return a + b;}// 函数重载:三个整数相加int add(int a, int b, int c) {return a + b + c;}// 函数重载:两个浮点数相加float add(float a, float b) {return a + b;}int main() {// 调用不同的add函数cout << "两个整数相加:" << add(3, 5) << endl;cout << "三个整数相加:" << add(3, 5, 7) << endl;cout << "两个浮点数相加: " << add(2.5f, 3.7f) << endl;return 0;}
有三个名为 add
的函数,它们的参数列表不同。通过参数列表的不同,编译器会根据提供的参数的数量和类型自己选择调用匹配的函数。
在使用函数重载时,有一些注意事项需要考虑:
参数列表的差异:
函数重载的关键是参数列表的差异,必须确保函数之间的参数列表在数量、类型或顺序上有所不同。
如果两个函数的参数列表仅通过返回类型不同,编译器将无法区分它们。
默认参数与重载:
默认参数与函数重载一起使用时,需要谨慎。在调用时,编译器需要能够确定调用的是哪个函数版本。
尽量避免在具有默认参数的函数中进行重载,以防止调用的歧义。
类型转换:
函数重载时,C++会尝试进行隐式类型转换,但可能导致歧义或不确定性。避免在参数类型之间存在歧义的情况下进行过于复杂的类型转换。
使用友元函数:
如果想要重载某个运算符,有时需要使用友元函数。友元函数在类的外部定义,允许访问类的私有成员,但也要注意保持良好的封装性。
重载与继承:
在继承关系中,派生类中的函数如果与基类中的函数具有相同的名称和参数列表,则会隐藏基类的函数。此时,派生类中的函数会隐藏基类中的同名函数,而不是构成重载关系。
#include <iostream>using namespace std;void print(int x) {cout << "Printing integer: " << x << endl;}// 错误:与上一个函数只有返回类型不同float print(int x) {cout << "Printing float: " << x << endl;return 0.0f;}int main() {int num = 20;print(num);return 0;}
上述例子中的重载运用错误,返回类型通常不被视为函数重载的一部分,所以不能通过返回类型来区分函数。
END
往期推荐
C++进阶学习:第七节-静态成员
C++进阶学习:第六节-this指针
C++进阶学习:第五节-友元函数
c++基础学习-目录
文章转载自Cpp入门到精通,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




