龙空技术网

C++如何定义函数重载?linux C++第6讲

远峰linux编程学堂 352

前言:

现在大家对“c语言重载”大约比较关怀,小伙伴们都需要剖析一些“c语言重载”的相关内容。那么小编也在网摘上收集了一些有关“c语言重载””的相关内容,希望朋友们能喜欢,大家快快来学习一下吧!

函数的重载

用C语言编程时,有时会发现几个不同名的函数实现的是同一类的操作,例如,要求从3个数中找出其中最大值,而这3个数的类型事先不确定,可能是 int, float或double类型,在写C程序的时候,需要分别设计出3个函数,其原型如下:

int max1(int a, int b, int c) //求 3 个int 类型变量中的最大值

float max2(float a, float b, float c) //求 3 个float 类型变量中的最大值

double max3(double a, double b, double c) //求3 个double 类型变量中的最大值

C语言规定在同一作用域(例如,同一个文件模块)中不能有同名的函数,因此,3个函数的名字不相同。我们来编写一个测试例子,新建test.c文件,使用gcc进行编译。程序测试代码如下:

此时,提示第3行和第10行定义my_max()函数重定义。那么,说明,C语言不支持同名函数的定义。不可以通过参数类型来区分同名函数的定义。

C++允许在同一作用域中用同一函数名定义多个函数,这些函数的参数个数和参数类型都不相同,这些同名的函数可用来实现不同的功能,这就是函数的重载,即一个函数名多用。

如下是一些例子:

int max(int a, int b, int c) //求 3 个int 类型变量中的最大值

float max(float a, float b, float c) //求 3 个float 类型变量中的最大值

double max(double a, double b, double c) //求 3 个double 类型变量中的最大值

int max(int a, int b) //求2 个int 型中最大值

可以看到,函数名都相同。

那么,我们新建一个test.cpp文件,使用g++来编译该C++程序。测试代码如下:

可以看到,C++语言支持同名函数的定义,可以通过函数的参数类型,区分不同函数的定义,这就是函数的重载。后面学习类的成员函数定义时,会再深入学习类的运算符重载。

注意:重载的函数的参数个数或类型必须至少有其中之一不同,函数返回值类型可以相同,也可以不同。但不允许参数个数和类型都相同,而只有返回值类型不同,因为,系统无法从函数的调用形式上判断哪一个函数与之匹配。

标签: #c语言重载