重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你是要函数重载吗?函数重载要满足下列条件:
成都创新互联公司专业为企业提供建水网站建设、建水做网站、建水网站设计、建水网站制作等企业网站建设、网页设计与制作、建水企业网站模板建站服务,10年建水做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
函数名称必须相同。
参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
函数的返回类型可以相同也可以不相同。
仅仅返回类型不同不足以成为函数的重载。
你定义了两个average函数,除了形参名字不一样,其他都一样,所以是不合法的。
而且如果都是float类型,没必要写两个,一个函数就够了,只是返回给不同的变量即可,比如第一个返回给average1,第二个返回给average2就行了。自定义函数里的average1只是一个代号,你换成其他任何名字一样可以执行并返回数值。
c语言写重载函数:
首先明确重载函数的定义:在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。
当将要定义一组函数,使它们执行一系列的操作,但是它们是应用在不同的参数类型上的。此时可以选择重载函数。
例如:
上面的三个函数都可以大概地说成判断一组数中的最大值,对于函数的用户来说,他们并不关心函数定义的细节,也就是说他们不关心判断两个整数的大小和判断数组(vector容器)数的大小应该使用不同的函数,而对于程序的设计者来说这可是不得不想到的。程序员必须记住并查找每个函数名。而函数的重载把程序员从这种问题的复杂性中解放了出来,C++提供了这种支持。
上面的三个比较大小的函数可以定义成:
通过参数就可以一眼分辨不同的函数。
标准C, 不支持函数重载。
函数重载是C++的概念。 不光是类的成员函数, 一般函数以及模板函数都是可以重载的。
不能重载的运算符只有5个:
1、. (成员访问运算符)
2、.* (成员指针访问运算符)
3、:: (域运算符)
4、sizeof
(长度运算符)
5、?: (条件运算符)
前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof
运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征。
C++对运算符重载定义了如下几条规则。
1) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。
例如,有人觉得BASIC中用“**“作为幂运算符很方便,也想在C++中将”**“定义为幂运算符,用”3**5“表示35,这样是不行的。
2)
重载不能改变运算符运算对象(即搡作数)的个数。如关系运算符“”和“ ” 等是双目运算符,重载后仍为双目运算符,需要两个参数。运算符“
+”,“-”,“*”,“”等既可以作为单目运算符,也可以作为双目运算符,可以分别将它们重载为单目运算符或双目运算符。
3)
重载不能改变运算符的优先级别。例如“*”和“/”优先于“
+”和“-”,不论怎样进行重载,各运算符之间的优先级别不会改变。有时在程序中希望改变某运算符的优先级,也只能使用加圆括号的办法强制改变重载运算符的运算顺序。
4)
重载不能改变运算符的结含性。如赋值运算符是右结合性(自右至左),重载后仍为右结合性。
5)
重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(2)点矛盾。
6)
重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质,如下面这样是不对的:
int operator + (int a,int b)
{
retum(a-b);
}
原来运算符+的作用是对两个数相加,现在企图通过重载使它的作用改为两个数相减。
如果允许这样重载的话,如果有表达式4+3,它的结果是7呢还是1?显然,这是绝对禁止的。
如果有两个参数,这两个参数可以都是类对象,也可以一个是类对象,一个是C
++标准类型的数据,如
Complex operator + (int a,Complexc)
{
return Complex(a +c.real, c.imag);
}
它的作用是使一个整数和一个复数相加。
7)
用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“”不必重载。
①赋值运算符( =
)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。
我们知道,可以用赋值运算符对类的对象赋值,这是因为系统已为每一个新声明的类重载了一个赋值运算符,它的作用是逐个复制类的数据成员。用户可以认为它是系统提供的默认的对象赋值运算符,可以直接用于对象间的赋值,不必自己进行重载。但是有时系统提供的默认的对象赋值运算符不能满足程序的要求,例如,数据成员中包含指向动态分配内存的指针成员时,在复制此成员时就可能出现危险。在这种情况下,
就需要自己重载赋值运算符。
②地址运算符也不必重载,它能返回类对象在内存中的起始地址。
8)
从理论上说,可以将一个运算符重载为执行任意的操作,如可以将加法运算符重载为输出对象中的信息,将“”运算符重载为“小于”运算。但这样违背了运算符重载的初衷,非但没有提髙可读性,反而使人莫名其妙,无法理解程序。应当使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能(如用“+”实现加法,用“”实现“大于”的关系运算)。
9)
运算符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是既非类的成员函数也不是友元函敝的普通函数。
参考资料
C++相关文章.C语言中文网[引用时间2018-4-1]
你的这种重载方式不对,如果你仔细去看看重载的定义,你就会发现只是类型不同的函数参数重载是不好实现的,编译器不能够识别你调用的是哪一个函数。函数的重载可以传递的参数个数不一致,函数返回值不一致,但是对于有相同参数,参数类型不同这种重载一般是不能实现的。
C语言中,有没有参数的函数都不能重载,只有C++才有函数重载功能。