COUT überschreiben



  • Schönen Abend !

    ich habe mir hier eine Klasse angelegt

    class test1 {
    int x;
    int y;
    int z;
    }
    

    ich hätte jetzt gerne dass ich diese Klasse direkt in den COUT hängen kann und dass dann alle 3 Integer-Werte der Reihe nach ausgegeben werden.
    Derzeit mache ich das so:

    test1 tmp;
    COUT << tmp.x << tmp.y << tmp.z << ENDL;
    

    es soll aber irgendwie durch überschreiben des Streams auch so gehen:

    COUT << tmp << ENDL;
    

    Kann mir da jemand einen kurzen Code angeben ?
    Wäre toll 😃

    Gute Nacht
    Flatscreen 🤡



  • Was ist COUT? Und ENDL?

    Normalerweise macht man das etwa so:

    std::ostream &operator<<(std::ostream &os, const test1 &t)
    {
        os << t.x << t.y << t.z;
        return os;
    }
    


  • Hier ein kleines Beispiel

    #include <iostream>
    
    struct Test
    {
      int p1;
      int p2;
      int p3;
    
      // Hier müsste es nicht friend und damit auch 
      // nicht deklariert sein, aber 
      // wenn du private/protected attribute hast 
      // musst du den operator als friend deklarieren 
      // damit der operator<< zugriff auf die benötigten daten hat
      friend std::ostream & operator << ( std::ostream & os , Test const & val );
    };
    
    std::ostream & operator << ( std::ostream & os , Test const & val )
    {
      return os << val.p1 << " "
                << val.p2 << " "
                << val.p3;             
    }
    
    int main()
    {
      Test test = { 1, 2 , 3};    
      std::cout << test << std::endl;
    }
    

    MfG



  • Da musst du den Shift-Operator (<<) überladen.
    So (Außerhalb der Klasse):

    ostream& operator<< (ostream& os, const testl& z)
    {
    os << z.x << ' ' << z.y << ' ' << z.z ;
    return os;
    }
    

    Musst natürlich drauf achten, dass operator<<() auch auf die Klasse zugreifen darf, also evtl. als friend-Funktion deklarieren.

    Gruß,

    Morph



  • Booah, warn mal wieder alle schneller als ich... 😞



  • Morph01 schrieb:

    Booah, warn mal wieder alle schneller als ich... 😞

    Es ist der Wille der zählt 😉

    BR

    evilissimo

    PS: Mach weiter so.


Anmelden zum Antworten