c语言怎么写重载函数?

c语言怎么写重载函数?,第1张

c语言写重载函数

首先明确重载函数的定义:在相同的声明域中的函数名相同的,而参数不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。

当将要定义一组函数,使它们执行一系列的 *** 作,但是它们是应用在不同的参数类型上的。此时可以选择重载函数。

例如:

上面的三个函数都可以大概地说成世戚高判断一组数中的最大值,对于函数的用户来说,他们并不关心函数定义的细节,也就是说他们不关心判断两个整数的大小和判断数组(vector容器)数的大搜尺小应该使用不同的函数,而对于程序的设计者来说这可是不得不想到的。程序员必须记住并查找每个函数名。而函数的重载把程序员从这种问题的复杂性中解放了出来,C++提供了这种支持。

上面的三个比较大小的函数可以定义成:

通过参数就可仔册以一眼分辨不同的函数。

所谓函数重载是指同一个函数名可以对应着多个函数的实现。例如,可以给函数名add()定义多个函数实现,该函数的功能是求和,即求两个 *** 作数的和。其中,一个函数实现是求两个int型数之和,另一个实现是求两个浮点型数之和,再一个实现是求两个复数的和。每种实丛瞎现对应着一个函数体,这些函数的名字相同,但是函培饥数的参数的类型不同。这就是函数重载的概念。函数重载在类和对象的应用尤其重要。

函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。这就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。

参数类型上不同的重载函数

下面举一个在参数类型不同的重载函数的例子:

#include <iostream.h>

int add(int, int)

double add(double, double)

void main()

{

cout<<add(5, 10)<<endl

cout<<add(5.0, 10.5)endl

}

int add(int x, int y)

{

return x+y

}

double add(double a, double b)

{

return a+b

}

该程序中,main()函数中调用相同名字add的两个函数,前边一个add()函数对应的是两个int型数求和的函数实现,而后边一个add()函数对应的是两个double型数求和的函数实现。这便是函数的重载。

以上程序输出结果为:

15

15.5

参数个数上不同的重载函数

下面举一个在参数个数上不相同的重载函数的例子:

#include <iostream.h>

int min(int a, int b)

int min(int a, int b, int c)

int min(int a, int b, int c, int d)

void main()

{

cout<<min(13, 5, 4, 9)<<endl

cout<<min(-2, 8, 0)<<endl

}

int min(int a, int b)

{

return a<b?a:b

}

int min(int a, int b, int c)

{

int t = min(a, b)

return min(t,c)

}

int min(int a, int b, int c, int d)

{

int t1 = min(a, b)

int t2 = min(c, d)

return min(t1, t2)

}

该程序中出现了函数重载,函数渗中空名min对应有三个不同的实现,函数的区分依据参数个数不同,这里的三个函数实现中,参数个数分别为2,3和4,在调用函数时根据实参的个数来选取不同的函数实现。

// 重载函数是函数的一种特殊情况,为方便使用,

// C++允许在同一范围中声明几个功能类似的同名函数,

// 但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,

// 也就是说用同一个运算符完成不同的运算功能。这就是重载函数。

// 重载函数常用来实现功能类似而所处理的数据类型不同的问题。

#include <cstdlib>

#include <cmath>

#include <iostream>

// 定义π的值,主要是利用数学函数中的如握反三角函数arccos(-1)=π

const double pi = acos(-1)

// 计算圆的面积,dbRadius为圆的半径

double getArea(double dbRadius)

{

    return pi*dbRadius*dbRadius

}

// 计算矩形的面积,dbLong、dbWide分别为矩形的长和宽

double getArea(double dbLong, double dbWide)

{

    return dbLong*dbWide

}

// 计算三角形面积,a、b、c分别为三角形的三条边

double getArea(double a, double b, double c)

{

    double p = (a 仔宽+ b + c) / 2.0

    return sqrt(p*(p - a)*(p - b)*(p - c))

}

int main()

{

    double a, b, r, m, n, o

    std::cout << "请输入圆的半径:" << std::endl

    std::cin >> r

    std::cout << "请输入矩形的长、宽:" << std::endl

    std::cin >> a >> b

    std::cout << "请输入三角形的三条边:"<< std::endl

    std::cin >> m >> n >> o

    std::cout

   渣戚庆     << "圆的面积:" << getArea(r) << std::endl

        << "矩形的面积:"<< getArea(a,b) << std::endl

        << "三角形的面积:" << getArea(m, n, o) << std::endl

    system("pause")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12255814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存