函数重载
1.什么是函数重载?
(1)一组函数,其中函数名相同,参数列表的个数或者类型不同。
(2)一组函数要称得上重载,一定先是处在同一个作用域当中。
(3)const或volatile的时候,会对形参类型有影响
例如下面两个函数产生的符号就是相同的
void fun(int a) {}
void fun(const int a) {}
而下面两个函数产生的符号就是不相同的
void fun(int *a) {}
void fun(const int *a) {}
(4)一组函数,函数名相同,参数列表也相同,仅仅是返回值不同,不叫函数重载,因为生成符号的时候和返回值没有什么关系。
函数重载常见面试题:请你解释一下什么叫做多态?
静态(编译时期)的多态:函数重载
动态(运行时期)的多态:
2.C++为什么支持函数重载,C语言不支持?
C++代码产生函数符号时,是由函数名+参数列表类型组成的。
C代码产生函数符号的时候,由函数名来决定。
3.C++与C语言代码之间如何互相调用?
常规状态下,C++无法直接调用C语言的代码。
如果要使用,可以将C函数的说明扩在"extern ‘‘C’’"内,意思就是告诉编译器在生成符号时按照C语言的规则生成。例如:
extern “C”
{
//括号内放C语言代码
}
C语言调用C++的代码不能使用”extern “C++”“,extern “C”只能被C++的编译器识别。
C语言如果想调用C++代码,只需要在C++源码扩在extern “C” 。
只要是C++ 编译器,都内置了_cplusplus这个宏名。
下面的代码不管是C生成还是C++生成,都可以直接调用
#ifdef _cplusplus
extern "C" {
#endif
int sum(int a,int b)
{
return a+b;
}
#ifdef _cplusplus
}
#endif
函数重载例
下面提供三组函数名相同,参数列表不同的函数
#include <iostream>
using namespace std;
int compare(int a,int b)
{
cout<<"compare_int_int"<<endl;
return a>b;
}
bool compare(double a,double b)
{
cout<<"compare_indouble_double"<<endl;
return a>b;
}
bool compare(const char *a,const char *b)
{
cout<<"compare_char*_char*"<<endl;
return strcmp(a,b)>0;
}
int main()
{
/*
int compare(int a,int b);
如果这里进行函数声明,则只会调用声明的函数
*/
cout<<"compare_indouble_double"<<endl;
compare(10,20);
compare(10.0,20.0);
compare("aaa","bbb");
return 0;
}
本文探讨了C++中的函数重载概念,包括函数名相同但参数列表不同的定义,以及为何C++支持而C语言不支持的原因。同时,阐述了C++与C语言代码之间的调用方式,并通过示例展示了函数重载的应用。
5013

被折叠的 条评论
为什么被折叠?



