1、什么是函数重载?
函数名相同,但是函数参数不同,称为函数重载。
2、函数参数不同有三种情况。
(1)参数的个数不相同。 列如:
int func(int i,double j);
int func(int i);
(2)参数的类型不同。 列如:
int func(int i,int j);
int func(int i,double j);
(3)参数的顺序不同。 列如:
int func(int i,double j);
int func(double i,int j);
只有以上三种情况表才能构成函数重载。
3、函数重载的作用
重载函数通常用来在同一个作用域内用同一个函数名命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。
4、函数重载的具体使用
实列说明:
#include<iostream>
using namespace std;
int square(int i)
{
return i * i;
}
double square(double i)
{
return i * i;
}
int main()
{
cout << square(3) << endl;
cout << square(5.45) << endl;
}
运行结果:
解析:
在main函数中,调用了两次square函数,实际上是调用了两个不同版本的square函数。系统根据实参的具体类型,来决定调用哪一个square函数。列如:当传入的参数是3时,系统判断3是int类型,所以调用与它同是int型的函数版本。
5、经典问题。
(1)为什么在C语言中不支持函数重载
编译器在编译文件时,只会给函数进行简单的重命名。具体的方法是给函数名之前加上”_”,所以两个函数名相同的函数在编译之后的函数名也照样相同,这就会因为不知道到底调用哪一个函数而出错。列如:在源代码中有两个相同的函数名 func
,经过编译器编译后,这两个函数名就会变成 _func
,这两个的函数名仍然相同,所以如果调用func
函数时,就不知道究竟调用的哪一个func
函数。
(2)c++为啥可以函数重载。
在c++中,编译器编译文件时,不仅会加上“_”,而且会加上函数类型。列如:在源代码中进行了函数重载,分别是func(int i,int j)
和func(int i,double j)
。经过编译器编译后,func(int i,int j)
的函数名就会变成_funcii
,其中最后两个ii
就代表了形参的类型;同理,func(int i,double j)
的函数名就会变成_funcid
。这也解释了为什么函数重载时要求参数的个数不相同、类型不相同、顺序不相同。
(3)C++中能否将一个函数按照C的风格来编译。
如果要将C++的一个函数按照C语言的风格来编译,在函数声明前面加上extern “C”