5函数重载与C-C++相互调用
函数重载
什么是函数重载:一组函数,函数名相同,但参数类型或个数不同。
C++为什么支持函数重载,但C不支持
- 本质是编译器产生符号的规则不一样:C++代码产生函数符号,由函数名和参数列表类型组成;而C代码产生函数符号,仅由函数名组成。当链接时,会发生符号的重定义。
重载的注意点
-
重载的前提是几个函数在同一作用域下。
//下述情况下可以正确调用对应的函数 #include<cstring> #include<iostream> using namespace std; bool compare(int a, int b){ cout << "int" << endl; return (a>b); } bool compare(double a, double b){ cout << "double" << endl; return(a>b); } bool compare(const char * a, const char * b){ cout << "double" << endl; return strcmp(a, b); } int main(){ compare(1, 2); compare(1.0, 2.0); compare("aa", "vv"); return 0; }//下述情况下无法正确调用对应的函数 #include<cstring> #include<iostream> using namespace std; bool compare(int a, int b){ cout << "int" << endl; return (a>b); } bool compare(double a, double b){ cout << "double" << endl; return(a>b); } bool compare(const char * a, const char * b){ cout << "double" << endl; return strcmp(a, b); } int main(){ bool compare(int, int);//当在局部声明了一个compare函数 compare(1, 2); //后续的所有compare函数在局部作用域即找到了可调用的函数,则不会继续向全局作用域寻找其他conpare函数 compare(1.0, 2.0); //会double强制类型转化int compare("aa", "vv"); //报错,无法强制类型转换 return 0; } -
const和volitale修饰形参,怎么影响形参类型的? 待补坑
-
一组函数的函数名和参数相同,返回类型不同,则不算重载。
-
什么是多态:编译期的静态多态:包含重载;运行期的动态多态。编译时期,指令就确定要重载哪个函数。
C++和C之间如何互相调用
-
下述为C++主程序调用C函数
//C规则下,只依据函数名生成符号表 int sum(int a, int b){ //sum .text return a + b; }//C++规则下,依据函数名与形参生成符号表 int sum(int a, int b); //sum_int_int "UND", 在链接时,无法匹配C中的符号sum int main(){ int ret = sum(10, 20); cout << "ret" << ret << endl; return 0; }extern "C" //这里把C函数的声明加入extern C中 { int sum(int a, int b); //按照C编译生成符号表 sum “UND” } int main(){ int ret = sum(10, 20); cout << "ret" << ret << endl; return 0; } -
同样,如果C主程序调用C++
extern "C" //cpp文件按照C编译 { int sum(int a, int b){ //sum .text return a + b; } }int sum(int a, int b); //sum “UND” int main(){ int ret = sum(10, 20); cout << "ret" << ret << endl; return 0; } -
经常写作
#ifdef __cplusplus //C++编译器内置的宏 extern "C"{ #endif //C++代码 #ifdef __cplusplus } #endif

浙公网安备 33010602011771号