C++重载

来源:互联网 发布:华为手机记录运动数据 编辑:程序博客网 时间:2024/06/05 00:30

1、什么是函数重载?

    在同一个作用域中(前提),函数名相同,参数表不相同的函数(条件);构成重载关系。    重载与函数的返回赖幸和参数名无关,只与参数的个数、类型和顺序有关。

2、重载解析

1)根据调用函数时所提供的实参,按照类型匹配的原则,找到相应的重载版本的过程。类型无法完全匹配时,char的整型提升为int;解析的时候是在类型安全的前提下,优先选择工作量小的进行的。2)重载原理:c++中的重载是通过换名来实现的,那么什么是换名?C++编译器在编译c++函数时,会根据该函数的参数表对其名称进行替换,因此同一个作用域中参数表不同的同名函数,在编译成二进制目标模块以后,起函数名是不同的。以下是Ubuntu下查看函数的换名:#include<iostream>using namespace std;char fun(short h,int i){    cout << "fun(short,int)" << endl;    return 'a';}void fun(float x,double y){    cout << "3fun(float,double)" << endl;    return'b';}[yang]g++ -c test.cpp[yang]nm test.o00000014 T _Z3funfd //换名之后 函数1 f-float d-int00000000 T _Z3funsi //换名之后 函数2 s-short i-double         U __gxx_personality_v03)从c->c++的函数调用的两种解决方式:a、在c中用的函数用c++的换名调用b、在c++中函数前些 externa “C” char fun(char a,int i){}让编译器按c的方式进行编译,不换名;extern “C”{    函数1,    函数2,    ...}注:被extern "C" 修饰的函数就不能实现函数重载。

3、函数缺省参数

1、在声明函数时可以为函数部分或者全部采用缺省值,调用函数时,如果某些参数没有提供实参,那么该参数可以取缺省值。2、如果函数的某个参数带有缺省值,那么该参数后面的所有参数都必须带有缺省值。3、避免缺省参数的重载产生歧义。
0 0
原创粉丝点击