为什么函数重载时仅仅返回值不同是不允许的

为什么函数重载时仅仅返回值不同是不允许的,第1张

假设你有两个返回值不同函数,比如

int getvalue(viod) {return value1;}

float getvalue(viod) {return value;}

那么当你去调用他们的时候,由于你调用的时候

写的是

getvalue();

于是你的编译器就无法知道 你调用的是上面哪个 函数(因为两个函数都不用传参数,编译器无法区分它们), 所以就会报错。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

如果你写成这样 (函数重载)

int getvalue(int i, int j) {return value1;}1

float getvalue(viod) {return value;}2

那么当你当你调用

getvalue()编译器就会知道 你调用的是第2个函数

getvalue(2, 3) 编译器就会知道 你调用的是第1个函数

就不会出错了。

重载的概念是:

方法名称相同,参数个数、次序、类型不同

因此重载对返回值没有要求,可以相同,也可以不同

但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载

如:

public int A(int i);

public double A(int i);

这2个方法不能构成重载,会有编译错误。

而:

public int A(int i):

public double A(double i);

这2个方法可以形成重载

因此你的是

方法名称相同,但一个有返回值一个没返回值,这两个方法不算方法重载。

方法重载需要满足下述几个条件:

(1)方法名称相同;

(2)参数特征至少有一项不相同。参数特征包括参数数量、参数类型和参数顺序。

可见返回值不是判断是否属于方法重载的依据。

怎么会没有返回类型?前置++返回左值,后置++返回右值

重载运算当然可以自己定义返回类型,左值也好右值也好,返回void也好,都是可以的。

不过内置类型是前置++返回左值,后置++返回右值的。如果你不希望自己定义的类给用户造成使用上的“迷惑”最好还是使用与内置数据类型相同的返回类型。

函数名必须相同,返回值可以相同,也可以不同。参数个数不同;个数相同时类型不同;参数个数类型都相同时参数顺序不同。这三种情况都满足重载要求。也就是说重载函数区分的方法只能从函数的形参里看。

以上是函数的重载,在进一步讲构造函数的重载。构造函数没有返回类型,所以名字相同,参数类型或个数不同。根据生成类的对象方法不同,调用不同的构造函数。

终上所述:

如果函数名相同,而参数类型或个数不同,认为是不同的函数,这叫函数重载

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

原文地址: http://outofmemory.cn/langs/11670934.html

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

发表评论

登录后才能评论

评论列表(0条)

保存