函数重载

概念

是c++中函数的一种特殊情况。在相同的作用域,函数名字相同而参数列表不同,函数形成重载。

参数列表

参数列表的不同体现在以下几点:

  1. 参数个数不同
  2. 参数类型次序不同
  3. 参数类型不同

注意:与返回值类型相同与否无关

test

#include<iostream>
using namespace std;
int myminus(int a, int b)
{
	return a - b;
}
double myminus(int a, double b)
{
	return a - b;
}
//出错:“int myminus(int,double)”: 重载函数与“double myminus(int,double)”只是在返回类型上不同
//int myminus(int a, double b)
//{
//	return a - b;
//}

double myminus(double a, int b)
{
	return a - b;
}

double myminus(double a, double b)
{
	return a - b;
}
int main()
{
	myminus(10, 5);
	myminus(13, 1.5);
	myminus(10.5, 1.2);
	return 0;
}

实现

编译器在编译阶段,对实参的类型进行推演,对函数进行名字修饰。根据推演实参类型的结果选择调用相应函数。

名字修饰

名字修饰是一种在编译过程中,将函数、变量的名称重新改编的机制,简单来说就是编译器为了区分各个函数,将函数通过某种算法,重新修饰为一个全局唯一的名称。
在c语言中名字修饰的规则非常简单,在底层无法根据参数类型生成名字,只是在函数名前加”_“。所以C语言不支持函数重载。
而在c++中,名字修饰规则较为复杂,虽然不同编译器对应关系跟不同。但是规则是一样的:“作用域+返回类型+函数名+参数列表”。

若在c++程序中需要函数以C语言风格编译,可以在函数前加上 extern “C”
如:

extern "C"int myminus(int a, int b)
{
	return a - b;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值