c++函数重载
同一作用域中 函数名相同 参数列表不同的函数构成重载关系。
参数列表不同 : 类型不同 、个数不同、参数顺序不同
调用函数时会根据传入的参数值的类型选择对函数。
#include <iostream>
using namespace std;
int getmax(int x,int y)
{
cout << "getmax(int,int)" << endl;
return x>y?x:y;
}
int getmax(int x,double y)
{
cout << "getmax(int,double)" << endl;
return x>y?x:y;
}
int main()
{
getmax(1,2);
getmax(1,2.5);
}
函数重载 在使用函数指针调用函数时会根据指针的类型选择对合适的函数。
#include <iostream>
using namespace std;
int getmax(int x,int y)
{
cout << "getmax(int,int)" << endl;
return x>y?x:y;
}
double getmax(double x,int y)
{
cout << "getmax(double,int)" << endl;
return x>y?x:y;
}
double getmax(int x,double y)
{
cout << "getmax(int,double)" << endl;
return x>y?x:y;
}
double (*pgetmax)(double x,int y);
double (*pfun)(int x,double y);
int main()
{
getmax(1,2);
getmax(1,2.5);
getmax(2.5,3);
pgetmax = getmax;
pgetmax(1.5,100);
pfun = getmax;
pfun(100,2.5);
}
函数重载的原理
c++ 语言中生成调用函数名时 不但要考虑函数名 还要考虑参数列表。
c 语言中生成调用函数名时 只考虑函数名。
c++函数重载引入的问题
跨编译器调用问题
解决方式
extern "C" int getmax(int x,int y);
按照c语言的方式 来产生调用的函数名
callcfun.c
#include <stdio.h>
int getmax(int x,int y)
{
printf("c fun getmax(int,int)\n");
return x>y?x:y;
}
cfun.cpp
#include <iostream>
using namespace std;
extern "C" int getmax(int x,int y);
int main()
{
cout << getmax(1,100) << endl;
}