C++——函数重载

函数重载

函数名相同,函数的参数列表(函数个数 或 类型 或 顺序)必须不同,常用于处理数据类型不同的问题。

注:C语言中没有函数重载,会是函数重定义的错误。

//函数重载
int Add(int left, int right) 
{ 
	return left + right; 
}                                                                                                                                      

double Add(double left, double right) //类型不同
{ 
	return left + right; 
}

int Add(double a,int b,float c)  //个数不同
{
        return a+b+c;
}

int Add(int a,float b,double c)  //顺序不同
{
        return a+b+c;
}

 函数重载和函数返回值无关。一下不是函数重载!!!


//不是函数重载!!!!
short Add(short left, short right) 
{ 
        return left+right;
}
 
int Add(short left, short right) 
{ 
        return left+right; 
}

问:为什么C中没有函数重载,C++中有函数重载?

C语言的名字修饰规则非常简单,只是在函数名字前面添加了下划线(_函数名)。因此当工程中存在相同函数名的函数时,就会产生冲突,发生重定义的错误。C++要支持函数重载,命名空间等,使得其修饰规则比较复杂(前缀+函数名+参数),不同编译器在底层的实现方式可能都有差异。

问:C++支持重载的原因?

因为C++中函数名的修饰规则更复杂。有名字修饰(name Mangling)。

问:C++中能否将一个函数按照C的风格来编译

用extern "C"

extern "C":告诉编译器,将 该函数按照C语言规则来编译。即:在函数面前加上就好了

extern "C" 
{
    int Add(int left, int right);
}    //这样也可以,这样大括号中间就可以有好多的代码,都是按C规则来编译
 
int main() 
{    
    Add(1,2);    
    return 0; 
}

一般不常用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值