Loading... ## 函数重载概述 能使名字方便使用,是任何程序设计语言的一个重要特征! 我们现实生活中经常会碰到-些字在不同的场景下具有不同的意思,比如汉语中的多音字”重”。 当我们说:“他好重啊,我都背不动"我们根据上下文意思,知道“重”在 此时此地表示重量的意思。 如果我们说“你怎么写了那么多重复的代码?维护性太差了!”这个地方我们知道,“重" 表示重复的意思。 同样-一个字在不同的场景下具有不同的含义。那么在C++中也有一种类似的现 象出现,同一个函数 名在不同场景下 * 可以具有不同的含义。 在传统c语言中,函数名必须是唯一-的, 程序中不允许出现同名的函数。在c++中是允许出现同名的函数,这种现象称为函数重载。 <div class="tip inlineBlock share"> 函数重载的目的就是为了方便的使用函数名。 </div> 函数重载并不复杂,等大家学完就会明白什么时候需要用到他们,以及是如何编译,链接的。 ## 函数重载 ### 函数重载的基本语法 实现函数重载的条件: 1. 同一个作用域 2. 参数个数不同 3. 参数类型不同 4. 参数顺序不同 <div class="tip inlineBlock error"> 返回值不能作为函数重载的条件,默认参数作为函数重载的条件要注意二义性。 </div> ![](https://blog.fivk.cn/usr/uploads/2021/04/3172088868.png) ```C++ #include<iostream> using namespace std; //函数一样 一样不一样 //函数的重载必须发生在同一个作用域 void fivk(int a) { cout << a; } void fivk(int a, int b) { //参数个数 cout << a + b; } void fivk(double a, int b) { //参数类型 cout << a + b; } void fivk(int a, double b) { //参数顺序 cout << a + b; } int main() { cout << "来一个普通的函数:" << endl << endl; cout << "void fivk(1) = "; fivk(1); cout << endl << endl; cout << "1.利用参数的个数不同重载函数:" << endl; cout << endl; cout << "void fivk(1,2) = "; fivk(1, 2); cout << endl; cout << endl; cout << "2.利用参数类型不同重载函数:" << endl << endl; cout << "void fivk(3.14,2) = "; fivk(3.14, 2); cout << endl << endl; cout << "3.利用参数顺序不同重载函数:" << endl << endl; cout << "void fivk(3,3.14) = "; fivk(3, 3.14); return 0; } ``` ### 函数重载的本质 编译器为了实现函数重载,也是默认为我们做了一些幕后的工作,编译器用不同的参数类型来修饰不同的函数名,比如void fivk();编译器可能会将函数名修饰成Fivk。这里我们用“可能”这个字眼是因为编译器如何修饰重载的函数名称并没有一个统一的标准,所以不同的编译器可能会产生不同的内部名。 ```C++ void fivk() { } void fivk(int a) { } void fivk(int a,int b) { } ``` 上面三个函数会被编译为不同的函数名。 最后修改:2021 年 04 月 11 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏