C++函数重载

C++函数重载
学习过C++的朋友都知道C++支持函数的重载,什么叫重载呢,就是我们写代码时有时会用两个相同名字的函数,编译器在编译时会根据不同的情况调用不同的函数。而这种情况在C语言中是不允许的,但是在C++里面是可以的。这里我们简单了解一下。
C++函数重载必须要满足的条件是:
1.函数名相同。
2.参数列表相同。

1.C++函数能够重载它的底层是怎么实现的呢?
我们来看一段很简单的代码:

#include <iostream>
using namespace std;

int Max(int a, int b)		//?Max@@YAHHH@Z
{
	return a > b ? a : b;
}

char Max(char a, char b)	//?Max@@YADDD@Z
{
	return a > b ? a : b;
}

double Max(double a, double b)	//?Max@@YANNN@Z
{
	return a > b ? a : b;
}

void main()
{
	cout << Max(10, 20) << endl;
	cout << Max('A', 'B') << endl;
	cout << Max(12.34, 20.34) << endl;
}

我们在执行这段代码时其实是可以得到正确结果的,因为C++在后台对三个函数名其实做了个重写,也叫函数原型。也就是代码上的注释,我们不必太太太在意,因为在不同的编译器下它的重写规则是不同的。我们这里不重点展开它的函数原型是怎么来的。简单理解就是在编译时使用了C++的调用约定,重写了函数的名字,导致每个函数的名字是唯一的,这样对计算机来说,就是你需要用哪个函数它就给你调哪个函数。可以这样说,写的代码三个函数的名字是给人看的,人家计算机有自己的一套命名规则,人家是不认识咱们写的函数名的嘿嘿。

2. 那C语言为什么不能进行函数重载呢?
从上面我们知道,函数重载的本质就是在计算机在后台重写了函数的名字,而C语言的调用约定下也会改写函数的名字。但是,C有点懒,它改写时只会在函数名前加上下划线,即**_Max**。这样一来,三个函数的名字都被改写成了_Max。那么计算机面对三个一模一样的函数时该调用哪个呢。显然是不可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值