target-c: перегрузка функции / метода? - PullRequest
1 голос
/ 28 июля 2011

Единственный способ, которым я знаю, что выполнять перегрузку функций / методов, это использовать базовый класс.Есть ли способ сделать это в том же классе без наследования?


Вот пример того, как я знаю, как перегрузить функцию путем наследования базового класса:

@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

Ответы [ 2 ]

8 голосов
/ 28 июля 2011

В Objective-C вы не можете перегружать функцию, чтобы принимать разные типы аргументов.Например, следующие два метода не будут работать:

- (NSString *) someStringBasedOnANumber:(int)aNumber{
    //some code here
}

- (NSString *) someStringBasedOnANumber:(double)aNumber{
    //some code here
}

Самое простое решение - изменить имя метода на Соглашение Apple по именованию методов и переименовать методы следующим образом:1006 *

- (NSString *) someStringBasedOnAnInt:(int)aNumber{
    //some code here
}

- (NSString *) someStringBasedOnADouble:(double)aNumber{
    //some code here
}

Предполагается, что имена методов описывают аргументы метода.Перегрузка идет вразрез с этим соглашением, поэтому имеет смысл, что это не разрешено.

3 голосов
/ 28 июля 2011

Если вы переопределяете метод, который присутствует в базовом классе, это не перегрузка, это переопределение. Новый метод заменяет метод в базовом классе. Обратите внимание, что вы должны дать ему ту же самую «подпись», то есть те же типы параметров и тип возвращаемого значения, чтобы он был полиморфным.

Вы не можете перегружать методы в Objective-C. У всех должно быть другое имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...