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

来源:互联网 发布:百度大数据彩票预测 编辑:程序博客网 时间:2024/04/30 16:57

重载的概念

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


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方式编译。




0 0
原创粉丝点击