函数重载是C++的特性,而C语言没有这种特性。
什么是函数重载?
支持相同函数名,不同参数列表的函数同时存在,而在C语言中会报错。
例如:
void testFun();
void testFun(int param);
void testFun(int param, bool flag);
void testFun(bool flag, int param);
以上函数在C++中能够同时存在,这种现象叫函数重载。
函数重载定义
C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个函数完成不同的功能。这就是重载函数。
调用同名函数时,编译器如何区分该调用哪一个
大家第一次接触到函数重载可能会有疑问,同名函数在被调用时,编译器是如何区分该调用哪一个函数的?
那是因为,C++编译器在编译之前有个重命名的阶段,就是把所有的函数重新取名。
这个重新取名的规则就是:(原函数名+参数列表)*每个编译器独有的运算公式
例如:
void fun1(); -> ?fun1@YAHHH@Z
void fun1(int a); -> ?fun1@YAGGG@Z
void fun1(double b, float c); -> ?fun1@YADDD@Z
所以,这三个函数虽然同名,但是由于他们的参数列表不同,经过编译器的重新命名之后得到的新名称完全不一样。所以,C++支持同名函数。(每个编译器重命名的规则不一定相同)
函数重载的用途
重载函数常用来实现功能类似而所处理的数据类型不同的问题。
例如:
void praseData(Class1 param); //解析Class1类型的数据
void praseData(Class2 param); //解析Class2类型的数据
void praseData(Class3 param); //解析Class3类型的数据
上诉三个函数,功能相同,都是解析数据,但是类型不同,使用重载函数可以增强代码可阅读性。
注意:
void testFun(int param);
int testFun(int param);
这两种函数不是函数重载,函数重载必须参数列表不同。
-------------------------我是分割线-------------------------------
免费分享C++全套书籍和全套视频
请扫码回复关键字“C++”领取