C++函数重载
函数重载主要以以下几个问题展开:
1,C++为什么支持函数重载,C语言不支持?
2,函数重载要注意什么?
3,C++和C代码之间如何互相调用?
#include<iostream>
//不同参数类型的比较函数
bool Compare(int a, int b)
{
std::cout << "compare_int "<< std::endl;
return a > b;
}
bool Compare(double a, double b)
{
std::cout << "compare_double" << std::endl;
return a > b;
}
bool Compare(const char* a, const char* b)
{
std::cout << "compare_char" << std::endl;
return strcmp(a, b) > 0;
}
int main()
{
Compare(10, 20);
Compare(11.1, 11.2);
Compare("abcd", "abcde");
return 0;
}

编译器没有报函数重定义错误,运行成功。这是典型的函数重载。
函数重载:一组函数,其中函数名相同,参数列表的个数或者类型不同,那么这一组函数就称作->函数重载。
C++代码产生函数符号时,是以函数名+参数列表类型组成。
C语言产生函数符号时,只由函数名决定。
所以在 .c文件中,因为函数名相同,所以会产生链接错误。
C++中,函数名相同时还带上了参数列表:
bool Compare(int a, int b)//Compare_int_int
bool Compare(double a, double b)//Compare_double_double
bool Compare(const char * a, const char * b)//Compare_char_char
当在main函数中声明函数时,因为作用域原因,函数调用时只取作用域内的函数声明。

一组函数要说是重载函数,必须要是先处于相同的作用域下。

可以使用#include<typeinfo>查看参数类型

这说明int和const int 主体都是int,是相同的。


运行成功了。
const和volatile的时候是怎么影响形参类型的?(后续在完善)
一组函数,函数名相同,参数列表也相同,仅仅是返回值不同,这种不叫函数重载。返回值是否相同,与该函数是否为重载函数没有任何关系。
C++调用C代码,无法直接调用,但可以将C函数的声明包含在extern "c"{}中,让编译器知道此方法是C定义即可。
C调用C++代码,将C++源码写在extern "c"{}中。
#ifdef _cplusplus
extern "c" {
#endif
int sum(int a, int b)
{
return a + b;
}
#ifdef _cplusplus
}
#endif
只要是C++编译器,都内置了_cplusplus这个宏。宏内的方法都可以直接调用。生成的都是C接口的函数,但C和C++都可以调用。

浙公网安备 33010602011771号