안녕하세요 목적-C에 안돼서, 오늘은 동적 타이핑의 개념을 배우고 내가 쓴 내가 출력을 가지고동적 타이핑과 동적 바인딩을 사용하면서 이름이 같은 두 메서드 (다른 클래스에 속함)가 동일한 프로토 타입을 사용해야하는 이유는 무엇입니까?
#import <Foundation/Foundation.h>
@interface A:NSObject
@property int var;
-(int)add:(A*)argObj;
@end
@implementation A
@synthesize var;
-(int)add:(A *)argObj
{
return (self.var + argObj.var);
}
@end
@interface B:NSObject
@property double var1;
-(double)add:(B *)argObj;
@end
@implementation B
@synthesize var1;
-(double)add:(B *)argObj
{
return (self.var1 + argObj.var1);
}
@end
int main()
{
@autorleaease{
id data1, data2;
A * aobj1 = [[A alloc]init];
aobj1.var = 30;
A * aobj2 = [[A alloc]init];
aobj2.var = 50;
data1 = aobj1;
data2 = aobj2;
NSLog(@"The sum of two A objs is : %i",[data1 add: data2]);// prints 80 which is correct
B * bobj1 = [[B alloc]init];
bobj1.var1 = 5.5;
B * bobj2 = [[B alloc]init];
bobj2.var1 = 5.5;
data1 = bobj1;
data2 = bobj2;
NSLog(@"The sum of 2 B objs is : %f",[data1 add: data2]);// prints 0.0000 why so ????
}
return 0;
}
이 프로그램을 실행하기 전까지는 추가를 실행하면 모든 것이 잘되었다, 결합했다 메서드를 클래스 A 개체에하지만 클래스 BI에 대한 add 메서드를 실행할 때 잘못된 대답을 얻었다. 왜 이런거야??
내 결과가 이렇게 보입니다. 출력에서 컴파일러는 컴파일러는 다양한 방법이 존재 말했지만이 방법이 완전히 다른 클래스에 속한 우리는 전화를 결합 동적 입력 및 동적를 사용하는 동안 제대로 잘 해결받을 것입니다이
main.m: In function 'main':
main.m:47:5: warning: multiple methods named '-add:' found [enabled by default]
NSLog(@"The sum of two A objs is : %i",[data1 add: data2]);
^
main.m:8:1: note: using '-(int)add:(A *)argObj'
-(int)add:(A*)argObj;
^
main.m:8:1: note: also found '-(int)add:(A *)argObj'
main.m:26:1: note: also found '-(double)add:(B *)argObj'
-(double)add:(B *)argObj;
^
main.m:55:5: warning: multiple methods named '-add:' found [enabled by default]
NSLog(@"The sum of 2 B objs is : %f",[data1 add: data2]);
^
main.m:8:1: note: using '-(int)add:(A *)argObj'
-(int)add:(A*)argObj;
^
main.m:8:1: note: also found '-(int)add:(A *)argObj'
main.m:26:1: note: also found '-(double)add:(B *)argObj'
-(double)add:(B *)argObj;
^
Executing the program....
$demo
2014-01-20 04:06:05.788 demo[30357] The sum of two A objs is : 80
2014-01-20 04:06:05.789 demo[30357] The sum of 2 B objs is : 0.000000
처럼 나에게 경고 ?? 그렇다면 왜 이런 결과가 나옵니까? 미리 감사드립니다. :)
실제 개체가 아닌'id data1, data2'를 사용하는 이유는 무엇입니까? – trojanfoe
그래, 내가 할 수 있었지만 동적 인 타이핑과 바인딩을 배웠던 이래로 나는이 개념들을 여기에서 사용하고 싶었다. 나는 런타임 동안 메소드에 대한 호출을 해결하기를 원했다. – iamyogish