000
25.09.2006, 14:12 Uhr
Steve06
|
Hallo,
bitte betrachtet folgenden Code, der beispielhaft für mein Problem ist.
Die Klassen Pkw und Lkw sind abgeleitet von Kfz. Um identifizieren zu können, um welche es sich handelt, hat jede Klasse ein String-Element, wo der Typ des Kfz gespeichert wird. In der Basisklasse ist eine operator<<-Methode zur Ausgabe des Typs definiert.
C++: |
class Kfz { const string kfz_name; Kfz() : kfz_name("default") {} friend ostream& operator<< (ostream& os, const Kfz& K) { os<< K.kfz_name; return os; } }
class Pkw : public Kfz { const string kfz_name; Pkw() : kfz_name("PKW") {} }
class Lkw : public Kfz { const string kfz_name; Lkw() : kfz_name("LKW") {} }
|
Wenn ich nun irgendwo schreibe:
C++: |
Pkw mein_pkw; cout << mein_pkw;
|
wird "default" ausgegeben, also der String der Basisklasse und nicht der String der abgeleiteten Klasse Pkw ("PKW").
Ich könnte natürlich die Operator<<-Methode für jede der abgeleiteten Klassen redefinieren, dann würde es wohl klappen, aber das wäre doch nicht elegant .
Also ich würde es schätzen, wenn ihr mir eine Lösung zu diesem Problem anbieten könntet - ihr könnt euch entweder eng an meinem Code halten und so wenig wie möglich ändern, oder mir auch eine ganz andere Möglichkeit aufzeigen, die denselben Zweck erfüllt.
Cheers, Steve |