Ausgabeoperator überladen bei Objektpointern
-
Hallo Forum,
bin neu hier, und habe natürlich gleich mal eine erste Frage, zu der ich bisher leider noch keine Antwort finden konnt:
Ich habe eine Klasse und einen Vektor, welcher Zeiger auf die Klasse enthält:
class kfz { ... };und
vector<kfz*> vtestauto;Jetzt würde ich gerne den Ausgabeoperator dahingehend überladen, dass ich mit
cout << vtestauto.at(x) << endl;eine vordefinierte Ausgabe erhalte.
Ich habe versucht die Überladung ganz normal per friend-Deklaration in der Klasse kfz zu realisieren:
class kfz{ ... friend std::ostream& operator<<(std::ostream &out, const kfz &k){ out << k.get_geschwindigkeit(); return out; } ... };Leider funktioniert das natürlich nicht mit "vtestauto[x]", da dieser Vektor ja einen Zeiger auf die Klasse enthält - und dieser Zeiger wird mir auch ausgegeben. (a la "0x8057380").
Meine Frage nun: Ist es möglich den Ausgabeoperator für die Objekt-Pointer zu überladen?
(Ich benutze den gcc version 3.3.4 (pre 3.3.5) unter Linux)
Danke schonmal,
yb
-
Hallo,
Um an die Werte des Zeigers zu kommen musst du ihn dereferenzieren. Schreibe stattvtestauto.at(i);*vtestauto.at(i); // Die Adresse die at(i) zurückliefert dereferenzieren...Caipi
-
Hallo YeahBuddy,
Ich bin mir nicht sicher, aber ich würde es mit:
cout << *vtestauto.at(x) << endl;versuchen.
Gruß,
CSpille*argh* zu langsam

-
Ihr seit spitze, hat funktioniert. Danke

Ich wusste doch dass es an so etwas liegt, aber ich habe mich wohl zu sehr auf den Code des Ausgabeoperators versteift

-
ich wuerde glatt mal vermuten dass du dir den operator<< als friend sparen kannst sofern du get_geschwindigkeit() nicht als privat deklariert hast (wovon ich allerdings bei dieser namensgebung nicht ausgehe).
-
Die Geschwindigkeit an sich ist noch als private deklariert, ja.
Die Aufrufs-Funktion ist public, von daher könnte ich wohl statt friend die Überladung auch als inline außerhalb der Klasse realisieren.Ich bin noch C++-Anfänger und versuche noch meine Probleme auf komplexere Weise zu lösen, um dabei zu lernen.