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 statt

    vtestauto.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.


Anmelden zum Antworten