Auf Methode zugreifen? < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:27 Di 20.01.2015 | Autor: | Kian |
Aufgabe | Erstellen Sie eine Klasse Basis und realisieren sie die Methode print die folgendes mit cout ausgibt "Basis".
Leiten sie von dieser Klasse die Klasse Mitte ab und realisieren sie die Methode print mit folgende Ausgabe "Mitte".
Leiten sie von dieser Klasse die Klasse Unten ab und realisieren sie auch hier die Methode print mit der Ausgabe "Unten".
Die Main enthält NUR einen Pointer der Klasse Basis.
Erzeugen sie hiermit durch geeignete Aufrufe der print Methode folgende Ausgabe:
"Unten Basis Unten Mitte Basis Unten" |
Hallo liebe User,
ich bin nun so weit das ich den einfachen teil aasprogrammiert habe.
1: |
| 2: |
| 3: | class Top {
| 4: | public:
| 5: |
| 6: | void print() {
| 7: | cout << "\nTop";
| 8: | }
| 9: |
| 10: | };
| 11: |
| 12: | class Medium : public Top {
| 13: | public:
| 14: |
| 15: | void print() {
| 16: | cout << "\nMedium";
| 17: | }
| 18: |
| 19: | };
| 20: |
| 21: | class Bottom : public Medium {
| 22: | public:
| 23: |
| 24: | void print() {
| 25: | cout << "\nBottom";
| 26: | }
| 27: |
| 28: |
| 29: | };
| 30: |
| 31: | int main(int argc, char** argv) {
| 32: |
| 33: | Top *t;
| 34: |
| 35: | return 0;
| 36: | }
| 37: |
|
Ich habe leider keine Idee, wie man jetzt auf die Methoden zugreifen kann.
Da fehlt doch noch was im Code oder?
Hat jemand ein Tipp oder eine Idee??
Lg
|
|
|
|
Hallo!
Zunächst machst du dir mit
Top *t;
nur einen Pointer für eine Instanz der Klasse Top. Du brauchst aber auch eine Instanz, mit der du dann auch arbeiten kannst:
Top *t;
t=new Top();
t->print();
Allerdings enthält Top ja nicht die Methoden der anderen Klassen. ABER:
Bottom ist ein Medium
Medium ist ein Top und folglich
Bottom ist ein Medium ist ein Top
Diese Formulierung "ist ein" trifft es gut, wenngleich es eher heißt "ist ein XXX mit ein paar Extras", und manchmal können die Extras auch die Eigenschaften der Basisklasse überschreiben.
Jedenfalls kannst deswegen du nun schreiben:
Top *t;
t=new Bottom();
t->print();
Weil nun die print() Methode von Bottom() überschrieben wird, wirst du hier automatisch die Methode von Bottom aufrufen. Aber die ursprüngliche Methode ist noch da, du mußt nur explizit angeben, aus welcher Klasse du sie haben möchtest:
t->Middle::print();
|
|
|
|