c++中函数重载的实现原理

来源:互联网 发布:亚马逊数据怎么分析 编辑:程序博客网 时间:2024/06/06 20:38

先来看一段代码

#include <stdio.h>


int Add(int a,int b)
{
return a+b;
}
double Add(double a,double b)
{
return a+b;
}
int main()
{
return 0;
}

在c语言编译器下是错误的,根本编译不过去,编译器会报出Add重定义的错误。

函数重载:为方便使用,c++中对函数可以进行重载。也就是说,在同一作用域类,一组函数的函数名可以相同,参数列表可不同(参数个数不同,参数类型不同),返回类型可同可不同。

不如下面的代码:

#include <iostream>
using namespace std;


int Add(int a,int b,int c)
{
return a+b+c;
}
int Add(int a,int b)
{
return a+b;
}
double Add(double a,double b)
{
return a+b;
}
double Add(int a,double b)
{
return a+b;
}
int main()
{
cout<<Add(1,2)<<endl;
cout<<Add(2,2,3)<<endl;
cout<<Add(3.14,2.25)<<endl;
cout<<Add(1,2.23)<<endl;
return 0;
}

在c++编译器中是可以编译过的,而且不会报出错误。

因为在c++的编译过程中对函数名的解析不同。


c++程序中调用c编译器编译后的函数为什么要加extern "C"?

C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言不同,例如 int Add(int x,int y); 在被C编译器编译后为_Add,而C++则会产生像?Add@@YAHHH@Z之类的名字,所以C++提供了C连接交换指定符号extern “C”来解决名字匹配问题。