第9课.函数重载分析(下)
1.重载与指针
typedef int (*PFUNC)(int a);
int c = 0;
PFUNC p = func;
c = p(1); //which function to call
第一个
函数重载遇上函数指针
将重载函数名赋值给函数指针时
a.根据重载规则挑选与函数指针参数列表一直的候选者
b.严格匹配候选者和函数类型与函数指针的函数类型。(不单单是函数名和参数列表来决定了)
注意
a.函数重载必然发生在同一个作用域中(c语言只有一个作用域:全局作用域;c++中不只一个作用域,还有类作用域,在其中都可以定于函数。你不可能这个作用域去调用另外一个作用域中的函数)
2.c++和c相互调用
c++直接编译c语言的源码是没有问题的,但是在工程中有些c代码已经不是源码了,已经被编译成了目标文件。即我们在工程中用到第三方的库,这些库是用c语言进行编译的。让c++也能够去编写c语言编译的库。
a.目的是编译器能够兼容c语言的编译方式
b.extern关键字能强制让c++编译器进行c方式的编译
extern "C"
{
//do C-style compilation here
}
问题:如何保证一段c代码只会以c的方式被编译?
__cplusplus是c++编译器内置的标准红定义。意义:确保c代码以统一的c方式被编译成目标文件。
#ifdef __cplusplus
extern "C" {
#endif
// C-style Compilation
#ifdef __cplusplus
}
#endif
注意事项
a.c++编译器不能以c的方式编译重载函数
b.编译方式决定函数名被编译后的目标名
1).c++编译方式将函数名和参数列表编译成目标名
2).c编译方式只将函数名作为目标名进行编译