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
。(只是澄清一下——下面的答案涵盖了其余的细节)。