C++基础 | 深入理解函数重载

什么是函数重载?

1、首先是定义:一组函数,其函数名相同,但是函数参数个数或者类型不同,那么这组函数就是重载函数。比如下面这组函数:


int compare(int a,int b)
{
    cout<<"this is compare int"<<endl;
    return a>b;
}

int compare(double a,double b)
{
    cout<<"this is compare double"<<endl;
    return a>b;
}

int compare(const char *a,const char *b)
{
    cout<<"this is compare har *"<<endl;
    return strcmp(a,b);
}

C++程序在内存布局中,用函数名+参数列表类型组成函数符号,而C程序则是用函数名来组成函数符号,所以C程序不允许重载。

2、函数称得上重载,就必须处于同一个作用域
这里重新考虑一下作用域这个概念。请看如下代码:

int main()
{
    {
        int b=4;
    }
    cout<<b<<endl;
    return 0;
}

这里打印b,会报b没有定义的错误。{}左右大括号可以直接使用作为限定访问域对于重载来说类似,如果访问域不同,就算不上重载

3、const或者volatile如何影响形参类型?
先看函数参数前加了const类型的情况:

void fun(int a){}
void fun(const int a){}

这里会报fun函数已定义的错误。首先对于a来说,其是int类型。即使加了const,编译器仍然识别a为int类型。所以本质上两个fun函数形参一致。

总结

对于函数重载,使用并不难。值得关注的是函数重载是C++静态多态的实现方式之一。对于多态后续将深入剖析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值