Methode mit Objekt in main < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:56 Mi 22.05.2013 | Autor: | Mija |
Hallo,
ich habe eine Klasse Adresse geschrieben, die als Datenelemente name, strasse, stadt und land enthält.
Von dieser Basisklasse stammt meine Klasse Post ab (mit den Datenelementen absender und adressat, beide vom Typ Adresse).
Von dieser Klasse Post stammt dann wiederum die Klasse Brief und die Klasse Paket ab.
Alle diese Klassen beinhalten eine Ausgabemethode (die also immer redefiniert wird)
Nun möchte ich in der Main ein Objekt vom Typ Post, eins vom Typ Brief und eins vom Typ Paket ausgeben lassen (also die Adresse des Absenders und des Adressaten).
Wie kann ich das machen ohne dass ich irgendeinen Operator überlade?
Ich habe es schon mit z.B.
diePost.ausgabe() bzw. diePost.Post::ausgabe() u.ä.
versucht. Geht aber leider nicht.
Ich würde mich sehr über eine Antowrt freuen!
|
|
|
|
Hallo!
Das verstehe ich nciht so ganz.
Du hast ein Paket mit zwei Adressen: Absender und Empfänger.
Dann wirst du mit der Vererbung nicht weit kommen, denn du kannst schlecht zweimal die gleiche Basisklasse für unterschiedliche Daten erben. Denk dran: Der Code der Klasse Adresse ist dann Bestandteil der Klasse Post, und das funktioniert zweimal nicht so richtig.
Viel mehr solltest du in der Paket-Klasse zwei Instanzen der Klasse Adresse erzeugen. Ich machst am Beispiel Brief, warum, merkst du gleich:
1: | class Brief{
| 2: | Adresse absender();
| 3: | Adresse empfaenger();
| 4: |
| 5: | Brief(){
| 6: | ....
| 7: | }
| 8: | ...
| 9: | } |
Danach funktioniert sowas wie
1: | Brief rechnung();
| 2: | rechnung.absender.ausgabe();
| 3: | rechnung.empfaenger.ausgabe(); |
Es gibt da eine Regel:
<Klasse A> ist ein <Klasse B> -> Vererbung
<Klasse> A hat ein <Klasse B> -> Instanz
Also: Ein Brief ist ein Absender -> Eher nicht, er hat einen Absender. Mach also eine Instanz, wie ich es geschrieben habe.
Jetzt könntest du sagen: Ein Paket ist ein Brief (mit zusätzlichen Eigenschaften), und lässt die Klasse Paket von der Klasse Brief erben:
1: | class Paket : Brief{
| 2: | Paket(){
| 3: | ....
| 4: | }
| 5: | ...
| 6: | } |
Damit hat (!) das Paket automatisch auch Absender und Empfänger. Zusätzlich kann die Klasse Paket weitere Methoden bekommen, um die zusätzlichen Eigenschaften wie z.B. Versicherungswert etc. abzuhandeln.
Das Beispiel hinkt ein wenig, weil Briefe sicher auch Eigenschaften haben können, die Pakete nicht haben, aber für den Anfang reicht es ja.
(Nebenbei: ich kann mir nie merken, wo im Code einer Klasse Klammern etc. hin kommen, daher mag es den ein oder anderen Bug geben)
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:49 Do 23.05.2013 | Autor: | Mija |
Hallo, also das mit dem "hat" und "ist" habe ich schonmal verstanden.
Aber wie erzeuge ich denn z.B. ein Objekt der Klasse Brief in der Klasse Brief selbst? Und wieso kann ich erst dann die Ausgabe in der main verwenden?
Ich habe das noch nie vorher so gesehen und finde auch in meiner Literatur bzw. den Vorlesungsunterlagen nichts dazu..
|
|
|
|
|
Hallo!
Ein Objekt Brief in der Klasse Brief? Wie meinst du das?
Du willst zwei Objekte vom typ Adresse in der Klasse Brief erzeugen (Zeilen 2&3 in meinem 1. Listing)
Meinst du Zeile 5? Das ist die Initialisierungs-Methode: Sobald du eine Instanz einer Klasse erzeugt hast (Brief rechnung();), wird automatisch die Methode Brief() (Zeile 5) innerhalb der Klasse Brief aufgerufen. Damit hat man die Möglichkeit, irgendwelche variablen zu setzen, oder was immer nötig ist, um die Klasse zu benutzen.
Oder was meinst du?
|
|
|
|