1、重载
同一个标识符在不同的上下文有不同的意义
2、函数重载
同一个函数名定义不同的函数
当函数名和不同的参数搭配时函数的含义不同
int func(int x)
int func(int a, int b)
int func(char *s)
3、函数重载至少满足下面的一个条件:
参数个数不同
参数类型不同
参数顺序不同
4、当函数默认参数遇上函数重载,会发生二义性,调用失败,编译不能通过
5、编译器调用重载函数的准则
将所有同名函数作为候选者
尝试寻找可行的候选函数
·精确匹配实参
·通过默认参数能够能够匹配实参
·通过默认类型转换匹配实参
匹配失败
最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。
无法匹配所有候选者,函数未定义,编译失败。
6、函数重载的注意事项
重载函数在本质上是相互独立的不同函数
重载函数的函数类型是不同的
函数返回值不能作为函数重载的依据
函数重载是由函数名和参数列表决定的。
7、函数重载与函数指针
当使用重载函数名对函数指针进行赋值时
·根据重载规则挑选与函数指针参数列表一致的候选者
·严格匹配候选者的函数类型与函数指针的函数类型
8、C++和C的相互调用
利用extern关键字强制让C++编译器对代码进行C方式编译
extern "C"
{
#include "add.h"
}
统一的解决方案
·__cplusplus是C++编译器内置的标准宏定义
·__cplusplus的意义
·让C代码既可以通过C编译器的编译,也可以在C++编译器中以C方式编译
#ifdef __cplusplus
extern "C" {
#endif
//函数声明 或 函数定义
#ifdef __cplusplus
}
#endif
9、C++编译重载函数时不能以C的方式编译
10、小结
·函数重载是C++对C语言的一个重要升级
·函数重载通过函数参数列表区分不同的同名函数
·函数的返回值类型不是函数重载的重要的依据
·extern关键字能够实现C和C++的相互调用
·C和C++并不对立,可以同时存在于项目中
同一个标识符在不同的上下文有不同的意义
2、函数重载
同一个函数名定义不同的函数
当函数名和不同的参数搭配时函数的含义不同
int func(int x)
int func(int a, int b)
int func(char *s)
3、函数重载至少满足下面的一个条件:
参数个数不同
参数类型不同
参数顺序不同
4、当函数默认参数遇上函数重载,会发生二义性,调用失败,编译不能通过
5、编译器调用重载函数的准则
将所有同名函数作为候选者
尝试寻找可行的候选函数
·精确匹配实参
·通过默认参数能够能够匹配实参
·通过默认类型转换匹配实参
匹配失败
最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。
无法匹配所有候选者,函数未定义,编译失败。
6、函数重载的注意事项
重载函数在本质上是相互独立的不同函数
重载函数的函数类型是不同的
函数返回值不能作为函数重载的依据
函数重载是由函数名和参数列表决定的。
7、函数重载与函数指针
当使用重载函数名对函数指针进行赋值时
·根据重载规则挑选与函数指针参数列表一致的候选者
·严格匹配候选者的函数类型与函数指针的函数类型
8、C++和C的相互调用
利用extern关键字强制让C++编译器对代码进行C方式编译
extern "C"
{
#include "add.h"
}
统一的解决方案
·__cplusplus是C++编译器内置的标准宏定义
·__cplusplus的意义
·让C代码既可以通过C编译器的编译,也可以在C++编译器中以C方式编译
#ifdef __cplusplus
extern "C" {
#endif
//函数声明 或 函数定义
#ifdef __cplusplus
}
#endif
9、C++编译重载函数时不能以C的方式编译
10、小结
·函数重载是C++对C语言的一个重要升级
·函数重载通过函数参数列表区分不同的同名函数
·函数的返回值类型不是函数重载的重要的依据
·extern关键字能够实现C和C++的相互调用
·C和C++并不对立,可以同时存在于项目中