C++的函数重载
同一作用域,函数名相同,参数表不同的函数
重载和形参名无关
不同作用域同名函数遵循临近隐藏原则
重载和返回类型无关
参数表不同:1.类型不一样 2.数目不一样 3.顺序不一样
void foo(){
cout << "void foo();" << endl;
}
void foo(int a){
cout << "void foo(int a);" << endl;
}
void foo(int a,int b){
cout << "void foo(int a,int b);" << endl;
}
void foo(int a,double b){
cout << "void foo(int a,double b);" << endl;
}
void foo(double a,int b){
cout << "void foo(double a,int b);" << endl;
}
int main()
{
foo();
foo(1);
foo(1 , 2);
foo(1 , 3.14);
foo(3.14 , 1);
return 0;
}
输出:
emmm……为什么C不能这么做,而C++可以呢?
这个主要是和编译器有关,编译器在编译我们的代码的时候会给我们的函数取一个别的名字,而不是我们自己写的名字。我们看看吧C编译器和C++编译器给取的名字吧。
用# nm test.out命令看一下C++编译器给上面代码的函数取的名字:
我们再用测试文件看一看C编译器给函数取的名字:
#include <stdio.h>
void foo(int i,double d)
{
printf(" ");
}
int main(int argc, const char * argv[])
{
return 0;
}