第四课-函数的升级(下)

    xiaoxiao2021-03-25  96

    重载的概念

    重载:同一标识符在不同的上下文有不同的意义;

    C++中的函数重载

    (1)函数重载

    用同一个函数名定义不同的函数;

    当函数名和不同的参数搭配时函数的意义不同;

    int func(int x)

    {

    return x;

    }

    int func(int a,int b)

    {

    return a+b;

    }

    int func(char* s)

    {

    return strlen(s);

    }

    函数重载至少满足下面的一个条件:

    (1)参数个数不同;

    (2)参数类型不同;

    (3)参数顺序不同;

    当函数默认参数遇上函数重载会发生什么呢?

    int func(int a,int b,int c=0)

    {

    return a+b+c;

    }

    int func(int a,int b)

    {

    return a+b;

    }

    int main()

    {

    fun(1,2);  //哪一个函数被调用?会出现二意性,使用参数默认时,不要使用函数重载,反过来也一样。

    return 0;

    }

    编译器调用重载函数的准则

    (1)将所有同名函数作为候选者;

    (2)尝试寻找可行的候选函数;

    精确匹配实参;

    通过默认参数能够匹配实参;

    通过默认类型转换匹配实参;

    (3)匹配失败

    最总寻找到的可行候选函数不唯一,则出现二义性,编译失败。

    无法匹配所有的候选者,函数未定义,编译失败。

    函数重载的注意事项

    (1)重载函数在本质上是相互独立的不同函数;

    (2)重载函数的函数类型是不同的;

    (3)函数返回值不能作为函数重载的依据;与返回值没有半毛钱关系。

    函数重载是由函数名和参数列表决定的。

    下面程序的哪一个函数将被调用?

    int func(int a)

    {

    return a;

    }

    int func(int a,int b)

    {

    retunr a+b;

    }

    int func(const char* s)

    {

    return strlen(s);

    }

    typedef int(*PFUNC)(int a);

    int main()

    {

    PFUNC p = func;

    p(1);     //哪一个函数将会被调用?

    return 0;

    }

    函数重载与函数指针

    (1)当使用重载函数名对函数指针进行赋值时:根据重载规则挑选与函数指针参数列表一致的候选者;严格匹配候选者的函数类型与函数指针的函数类型。

    C++和C的相互调用

    (1)在项目中融合C++和C代码是实际工程中不可避免的;

    (2)虽然C++编译器能够兼容C语言的编译方式,但C++编译器会优先使用C++的方式进行编译;

    (3)利用extern关键字强制让C++编译器对代码进行C方式编译。

    转载请注明原文地址: https://ju.6miu.com/read-19039.html

    最新回复(0)