函数重载就是用一个函数名定义不同的函数,当函数名和不同的参数搭配是函数的含义不同.
重载的三要素:
1、同名
2、不同参
3、同作用域
比如:
using namespace std;
int Sum(int a,int b) //Sum@@YAHHH@Z
{
return a+b;
}
double Sum(double x,double y) //Sum@@YANNN@Z
{
return x+y;
}
int main()
{
cout<<”Sum is:”<<Sum(1,3);
cout<<”Sum is:”<<Sum(1.2,3.1);
}
四种调用约定:
_cdecl c标准调用约定
_stdcall windows下标准调用约定
_fastcall 快速调用约定
_thiscall 类成员方法调用约定
约定不同点:
1.函数的符号生成
2.实参的入栈顺序
3.形参的开辟和清理
_cdecl 调用方 调用方
_stdcall 调用方 被调用方
_fastcall 调用方 被调用方
2、 C++编译器的函数名修饰规则
对于__stdcall方式,参数表的开始标识是“@@YG”,对于__cdecl方式则是“@@YA”,对于 __fastcall方式则是“@@YI”。
符号生成规则
_cdecl调用约定:“?”+函数名+参数表的开始标识 “@@YA” + 函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。
_stdcall调用约定:“?”+函数名+参数表的开始标识“@@YG”+函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。
_fastcal调用约定:“?”+函数名+参数表的开始标识 “@@YI”+ 函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。