anhe
Aktives Mitglied
Thread Starter
- Dabei seit
- 13.11.2007
- Beiträge
- 1.899
- Reaktionspunkte
- 309
Hallo zusammen,
ich lerne gerade nach dem Buch "Programming in Objective-C" von Stephen G. Kochan (6. Auflage). Momentan befasse ich mich im Kapitel 11 mit Protokollen, das ist aber hier nicht direkt das Problem. Ich komme mit einer Methode die ich als Lösung einer Aufgabe geschrieben habe nicht weiter. Ich habe hierzu das folgende Minimalbeispiel geschrieben:
Das Problem liegt in der Methode "-(BOOL) isEqualTo: (id) object". Leider liefert [a isEqualTo:b] nicht Yes bzw. 1 als Antwort, obwohl ich beiden Instanzen die gleichen Werte als Variablen zugewiesen habe. Einzig [a isEqualTo:a] liefert YES als Antwort. Prüft "(self == object) ob es exakt die gleichen Speicherbereiche sind und nicht die eingetragenen Werte identisch sind? Die Zuweisung von (id) object als Instanz von "Fraktion" funktioniert. Das habe ich mit [object class] überprüft.
Die Methode "-(BOOL) isEqualTo2id) object" vergleicht die Instanzvariablen direkt und funktioniert wie sie soll auch für zwei nichtidentische Instanzen deren Variablen die gleichen Werte haben.
Über ein paar erklärende Worte würde ich mich sehr freuen.
Viele Grüße
André
ich lerne gerade nach dem Buch "Programming in Objective-C" von Stephen G. Kochan (6. Auflage). Momentan befasse ich mich im Kapitel 11 mit Protokollen, das ist aber hier nicht direkt das Problem. Ich komme mit einer Methode die ich als Lösung einer Aufgabe geschrieben habe nicht weiter. Ich habe hierzu das folgende Minimalbeispiel geschrieben:
Code:
#import <Foundation/Foundation.h>
@interface Fraction : NSObject
@property int numerator, denominator;
-(void) setTo: (int) n over: (int) d;
-(Fraction *) initWith: (int) n over: (int) d;
-(BOOL) isEqualTo:(id) object;
-(BOOL) isEqualTo2:(Fraction *) f;
@end
@implementation Fraction
@synthesize numerator, denominator;
-(void) setTo:(int)n over:(int)d
{
numerator = n;
denominator = d;
}
-(Fraction *) initWith:(int)n over:(int)d
{
self = [super init];
if (self)
[self setTo: n over:d];
return self;
}
-(BOOL) isEqualTo:(id)object
{
BOOL isEqual = NO;
//NSLog(@"%@",[object class]);
if (self == object)
isEqual = YES;
return isEqual;
}
-(BOOL) isEqualTo2:(id)object
{
BOOL isEqual = NO;
if ([self numerator]==[object numerator] && [self denominator] == [object denominator]) {
isEqual = YES;
}
return isEqual;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Fraction *a, *b;
a = [[Fraction alloc] initWith:3 over:5];
b = [[Fraction alloc] initWith:3 over:5];
if ([a isEqualTo:b]) {
NSLog(@"Fraction a is equal to fraction b");
}
else
NSLog(@"No, Fraction a is not equal to fraction b");
NSLog(@"%i", [a isEqualTo:b]);
NSLog(@"%i", [a isEqualTo:a]);
NSLog(@"%i", [a isEqualTo2:b]);
}
return 0;
}
Code:
No, Fraction a is not equal to fraction b
0
1
1
Die Methode "-(BOOL) isEqualTo2id) object" vergleicht die Instanzvariablen direkt und funktioniert wie sie soll auch für zwei nichtidentische Instanzen deren Variablen die gleichen Werte haben.
Über ein paar erklärende Worte würde ich mich sehr freuen.
Viele Grüße
André