函数重载和缺省参数

本文介绍了C++中的函数重载机制,解释了为什么需要函数重载,以及函数重载与C语言的区别。同时,讨论了缺省参数的概念,包括如何使用缺省参数以及设置缺省参数的注意事项。函数重载允许同名函数通过参数个数或类型的不同实现不同功能,而缺省参数则为函数调用提供了便利,允许在不指定某些参数时使用预设的默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数重载

C++允许在同一作用域类声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能

函数重载必须是参数的个数或者类型不同,与返回值无关。

在C语言当中是不支持函数重载的,在c语言编译的时候是完全根据函数名进行编译的,而c++当中,函数进行重命名的时候,会给与C的重命名不一样,会加上参数的内容。
也就是调用的时候,会根据不通过的参数,找寻不同的地址,进入不同的函数。

例如:

#include<iostream>
#include<cstdlib>
int add(int a, int b)
{
    return a + b;
}

double add(double a, double b)
{

    return a + b+1;
}

int main()
{
    std::cout<<add(4 , 5)<<std::endl;
    std::cout<<add(4.0, 5.0)<<std::endl;
    system("pause");
    return 0;
}

上述程序就是一个很好的例子,add函数进行了函数重载。

为什么需要函数重载(why)?

试想如果没有函数重载机制,如在C中,你必须要这样去做:为这个print函数取不同的名字,如print_int、print_string。这里还只是两个的情况,如果是很多个的话,就需要为实现同一个功能的函数取很多个名字,如加入打印long型、char*、各种类型的数组等等。这样做很不友好!
类的构造函数跟类名相同,也就是说:构造函数都同名。如果没有函数重载机制,要想实例化不同的对象,那是相当的麻烦!
操作符重载,本质上就是函数重载,它大大丰富了已有操作符的含义,方便使用,如+可用于连接字符串等!

缺省参数

对于c++来说,还引入了缺省参数这样一个概念。
缺省参数:就是在声明函数的某个参数的时候为之指定一个默认值,在调用该函数的时候如果采用该默认值,你就无须指定该参数。

例如:

```
#include<iostream>
#include<cstdlib>
int add(int a = 2, int b = 3)
{

    return a + b;
}

int main()
{

    std::cout << add() << std::endl;


    system("pause");
    return 0;
}

上述这个过程是一个全缺省,还有一种半缺省。

#include<iostream>
#include<cstdlib>

using namespace std;



int add(int a , int b = 3)
{

    return a + b;
}

int main()
{

    std::cout << add(8,2) << std::endl;


    system("pause");
    return 0;
}

缺省参数注意事项:
函数的处理顺序是从右往左。所以对于缺省参数来说,他的缺省顺序也应该是从右向左
,把缺省的放到右边,不缺省的放到最左边。缺省参数中间不能穿插不缺省的参数。

函数指针没有默认参数,函数指针必须全部输入数据,而且函数指针需要精确调用,函数重载和函数缺省参数容易发生冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值