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也好,都是可以的。
不过内置类型是前置++返回左值,后置++返回右值的。如果你不希望自己定义的类给用户造成使用上的“迷惑”最好还是使用与内置数据类型相同的返回类型。
函数名必须相同,返回值可以相同,也可以不同。参数个数不同;个数相同时类型不同;参数个数类型都相同时参数顺序不同。这三种情况都满足重载要求。也就是说重载函数区分的方法只能从函数的形参里看。
以上是函数的重载,在进一步讲构造函数的重载。构造函数没有返回类型,所以名字相同,参数类型或个数不同。根据生成类的对象方法不同,调用不同的构造函数。
终上所述:
如果函数名相同,而参数类型或个数不同,认为是不同的函数,这叫函数重载
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)