Objective c 目标c:函数/方法重载?
我所知道的实现函数/方法重载的唯一方法是通过基类。有没有一种方法可以在同一个类中无继承地使用它Objective c 目标c:函数/方法重载?,objective-c,cocoa-touch,Objective C,Cocoa Touch,我所知道的实现函数/方法重载的唯一方法是通过基类。有没有一种方法可以在同一个类中无继承地使用它 下面是我所知道的通过继承基类进行函数重载的唯一方法的示例: @interface class1: NSObject -(void) print; @end @implementation class1 -(void) print { NSLog(@"Hello there"); } @end @interface class2: class1 -(void) print: (in
下面是我所知道的通过继承基类进行函数重载的唯一方法的示例:
@interface class1: NSObject
-(void) print;
@end
@implementation class1
-(void) print
{
NSLog(@"Hello there");
}
@end
@interface class2: class1
-(void) print: (int) x;
@end
@implementation class2
-(void) print: (int) x
{
NSLog(@"Your number is %d", x);
}
@end
int main(void)
{
class2 *c2 = [class2 new];
[c2 print];
[c2 print: 5];
}
结果:
Hello there
Your number is 5
在Objective-C中,不能重载函数以接受不同类型的参数。例如,以下两种方法不起作用:
- (NSString *) someStringBasedOnANumber:(int)aNumber{
//some code here
}
- (NSString *) someStringBasedOnANumber:(double)aNumber{
//some code here
}
最简单的解决方案是将方法名称更改为跟随,并重命名方法,如下所示:
- (NSString *) someStringBasedOnAnInt:(int)aNumber{
//some code here
}
- (NSString *) someStringBasedOnADouble:(double)aNumber{
//some code here
}
方法名应该是描述方法参数的。重载违背了这一约定,因此不允许重载是有道理的。在Objective-C中,不能重载函数以接受不同类型的参数。例如,以下两种方法不起作用:
- (NSString *) someStringBasedOnANumber:(int)aNumber{
//some code here
}
- (NSString *) someStringBasedOnANumber:(double)aNumber{
//some code here
}
最简单的解决方案是将方法名称更改为跟随,并重命名方法,如下所示:
- (NSString *) someStringBasedOnAnInt:(int)aNumber{
//some code here
}
- (NSString *) someStringBasedOnADouble:(double)aNumber{
//some code here
}
方法名应该是描述方法参数的。重载违背了此约定,因此它是不允许的。如果重写基类中存在的方法,这不是重载,而是重写。新方法替换基类中的方法。请注意,您应该为其提供相同的“签名”,即相同的参数类型和返回类型,以便使其具有多态性
不能重载Objective-C中的方法。它们都应该有不同的名称。如果重写基类中存在的方法,则不是重载,而是重写。新方法替换基类中的方法。请注意,您应该为其提供相同的“签名”,即相同的参数类型和返回类型,以便使其具有多态性
您不能在Objective-C中重载方法。它们都应该有不同的名称。您能用一个例子说明一下吗?这不是重载。它也不是压倒一切的。您已经实现了两种完全不同的方法--
print:
和print
。(只是一个澄清——下面的答案涵盖了其余的细节)。你能用一个例子来澄清吗?这不是超载。它也不是压倒一切的。您已经实现了两种完全不同的方法--print:
和print
。(只是澄清一下——下面的答案涵盖了其余的细节)。