2011-02-10 13 views
7

Tengo dudas sobre la sobrecarga de métodos de Objective-C. Java admite la sobrecarga de métodos con el mismo nombre , mismo número de argumentos de diferentes tipos. Pero cuando trato de hacer una declaración similar en Objective-C, me arroja el error Duplicate declaration of method. Tenga en cuenta el siguiente código,Sobrecarga de método Objective-C

/* Java */ 

int add(int i, int j); 
int add(int i, int j, int k); // Accepted 
float add(float i, float j); // Accepted 

/* Objective-C */ 

- (int)add:(int)i and:(int)j; 
- (int)add:(int)i and:(int)j and:(int)k; // Accepted 
- (float)add:(float)i and:(float)j; // Throws error 

¿Por qué no es compatible con Objective-C? ¿Hay una alternativa para esto?

+0

Tengo una duda sobre la sobrecarga de métodos en Objective-C también. Estoy bastante seguro de que no existe. – JeremyP

+0

¿Seguro que no es porque escribió 'plano' en lugar de 'flotar'? : P: P – hauntsaninja

+0

@hauntsaninja: :) gracias ... Lo corrigí ahora .. – EmptyStack

Respuesta

15

Simplemente no es compatible con Objective-C. No fue compatible con el antiguo C, por lo que no es tan sorprendente que Objective-C tampoco haya agregado la sobrecarga de métodos. Para mayor claridad, esto a veces puede ser bueno. Por lo general, la forma de evitar esto es incluir cierta información sobre el parámetro en el nombre de la función. Ej:

- (int) addInt:(int)i toInt:(int)j; 
- (int) addInt:(int)i toInt:(int)j andInt:(int)k; 
- (float) addFloat:(float)i toFloat:(float)j; 
6

A partir de esta:

- (int)add:(int)i and:(int)j; 

Esto no omite nada - es sólo otro método:

- (int)add:(int)i and:(int)j and:(int)k; // Accepted 

no se acepta la siguiente específicamente porque Objective-C no permite covariante o contravariante declaraciones de métodos. Tampoco Objetive-C hace una sobrecarga de despacho basada en Java y C++.

- (float)add:(float)i and:(float)j; // Throws error 

Tenga en cuenta que Java se obtuvo bastante directamente de Objective-C.

+0

+1 por * "Objective-C no permite declaraciones de métodos covariantes o contravariantes" * – EmptyStack

Cuestiones relacionadas