C++复习之函数重载

本文探讨了C++中的函数重载概念,包括函数名相同但参数列表不同的定义,以及为何C++支持而C语言不支持的原因。同时,阐述了C++与C语言代码之间的调用方式,并通过示例展示了函数重载的应用。

函数重载

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值