Objective-C中的函数重载?
问题描述:
根据我的理解C专家Objective-C是一种动态绑定语言,不允许重载类中的任何方法。Objective-C中的函数重载?
但有一两件事让我感到愤怒,如果我写两个方法具有相同的名称,但不同数量的参数列表,如:
// Which is not allowed in objective-c
-(void)updateValue:(int)intVal{
}
-(void)updateValue:(float)floatVal{
}
但其中的Objective-C允许第二种情况是:
// Allowed in Objective-C
-(void)updateValue:(int)intVal{
}
-(void)updateValue:(float)floatVal :(int)intVal{
}
虽然这两种情况都是方法重载。
现在我的问题是为什么允许第二种情况。
在第二种情况下是否改变Method Name的方法有两个参数?或者是其他东西 ?
请解释一下。
答
是否在第二种情况下改变Method Name的方法有两个参数?
是的。方法名称是其所有参数前缀(包括冒号)的组合。所以你的两种方法是updateValue:
和updateValue::
。
HTH
答
-(void)updateValue:(int)intVal
{
}
-(void)updateValue:(float)floatVal
{
}
这是不允许的作为当与然后因为型铸造值的参数的用户呼叫updateValue可以改变,模糊的方法是展示。
-(void)updateValue:(int)intVal
{
}
-(void)updateValue:(float)floatVal :(int)intVal
{
}
被允许作为参数计数是不同的,所以编译器知道调用哪个方法,并且当如此暧昧方法调用不是他们
不要写' - (无效)updateValue:(浮点)floatVal:(INT) intVal'。至少,编写' - (void)updateValue:(float)floatVal andSomething:(int)intVal'。否则,签名是'-updateValue:','-updateValue ::'(当没有参数介绍时)和'-updateValue:andSomething:'。 – Larme