
Kapitel 7 - Fortsetzung
Vererbte Methoden erweitern
Angenommen Sie wollen ein Programm zur Berechnung von Rechtecken erstellen, dann könnte das im Folgenden so aussehen.
Programm 7.2
-----------------------------------------------------------------------------------------------------------------
#import <objc/Object.h>
#import <stdio.h>
@interface Rechteck: Object
{
int breite;
int laenge;
}
-(void) setzeBreite: (int) b;
-(void) setzeLaenge: (int) l;
-(void) setzeBreite: (int) b undLaenge: (int) l;
-(int) breite;
-(int) laenge;
-(int) flaeche;
-(int) umfang;
@end
@implementation Rechteck;
-(void) setzeBreite: (int) b
{
breite = b;
}
-(void) setzeLaenge: (int) l
{
laenge = l;
}
-(void) setzeBreite: (int) b undLaenge: (int) l
{
breite = b;
laenge = l;
}
-(int) breite
{
return breite;
}
-(int) laenge
{
return laenge;
}
-(int) flaeche
{
return breite * laenge;
}
-(int) umfang
{
return (breite + laenge) * 2;
}
@end
int main (int argc, char *argv[])
{
Rechteck *myRechteck = [[Rechteck alloc] init];
[myRechteck setzeBreite: 5 undLaenge: 8];
printf ("Rechteck: b = %im, l = %im\n", [myRechteck breite], [myRechteck laenge]);
printf ("Fläche = %i qm, Umfang = %im\n", [myRechteck flaeche], [myRechteck umfang]);
[myRechteck free];
return 0;
}
Programm 7.1 output
-----------------------------------------------------------------------------------------------------------------
Rechteck: b = 8m, l = 5m
Fläche = 40qm, Umfang = 26m
----------------------------------------------------------------------------------------------------------------
Das obere Programm dürfte für sich klar sein und keiner genaueren Erklärung mehr bedürfen. Jetzt wollen Sie nicht mehr mit Rechtecken sondern mit Quadraten arbeiten. Eine Quadrat unterscheidet sich vom Rechteck bekanntlich dahingehend, dass beim Quadrat die Kantenlängen gleich sind. Sie können das obere Programm direkt erweitern.
#import <objc/Object.h>
#import <stdio.h>
@interface Rechteck: Object
{
int breite;
int laenge;
}
-(void) setzeBreite: (int) b;
-(void) setzeLaenge: (int) l;
-(void) setzeBreite: (int) b undLaenge: (int) l;
-(int) breite;
-(int) laenge;
-(int) flaeche;
-(int) umfang;
@end
@implementation Rechteck;
-(void) setzeBreite: (int) b
{
breite = b;
}
-(void) setzeLaenge: (int) l
{
laenge = l;
}
-(void) setzeBreite: (int) b undLaenge: (int) l
{
breite = b;
laenge = l;
}
-(int) breite
{
return breite;
}
-(int) laenge
{
return laenge;
}
-(int) flaeche
{
return breite * laenge;
}
-(int) umfang
{
return (breite + laenge) * 2;
}
@end
@interface Quadrat: Rechteck
-(void) setzeKantenlaenge: (int) s;
-(int) kLaenge;
@end
@implementation Quadrat: Rechteck;
-(void) setzeKantenlaenge: (int) s
{
[self setzeBreite: s undLaenge: s];
}
-(int) kLaenge
{
return breite;
}
@end
int main (int argc, char *argv[])
{
Quadrat *myQuadrat = [[Quadrat alloc] init];
[myQuadrat setzeKantenlaenge: 5];
printf ("Quadrat Kantenlaenge = %im\n", [myQuadrat kLaenge]);
printf ("Flaeche = %im, Umfang = %im\n",
[myQuadrat flaeche], [myQuadrat umfang]);
[myQuadrat free];
return 0;
}
Programm 7.2 output
-----------------------------------------------------------------------------------------------------------------
Quadrat Kantenlaenge = 5m
Flaeche = 25m, Umfang = 20m
test78 has exited with status 0.
-----------------------------------------------------------------------------------------------------------------
Genau so gut könnten Sie auch die einzelnen Klassen auf verschiedene Dateien aufteilen können.
weiter ---- Objective-C Index ---- Startseite----zurück
EINSTIEG
KAPITEL 1: SCHRITT FÜR SCHRITT ZUM ERSTEN PROGRAMM
KAPITEL 2: OBJEKTE, KLASSEN, INSTANZEN UND METHODEN
KAPITEL 3: DIE VERSCHIEDENEN DATENTYPEN
KAPITEL 4: DIE PROGRAMMSCHLEIFEN
KAPITEL 5: ENTSCHEIDE DICH, ENTWEDER ODER....
KAPITEL 6: UND NOCHMALS KLASSEN
KAPITEL 7: VERERBUNG
KAPITEL 8: POLYMORPHISMUS, DYNASCHISCHE TYPISIERUNG UND DYNAMISCHES BINDEN
KAPITEL 9: NOCH MEHR DATENTYPEN UND VARIABLEN
KAPITEL 10: CATEGORIES, POSING AND PROTOCOL
KAPITEL 11: DER PRÄPROZESSOR