C++学习2 | 函数重载

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;
}

可以看到,C编译器给C的函数取名是不带参数的。

C++编译器给函数取名的时候带了参数。

这样我们就很清楚了,为什么C++中参数表不同可以重载了。

猜你喜欢

转载自blog.csdn.net/Hanoi_ahoj/article/details/81414855