Überladen von operator<<



  • Hallo.

    Ich habe zurzeit keine plan wie ich an eine bestimmte Sache rangehen soll.
    Ich habe mit das Tutorial hier auf c-plusplus.net zu den <<operator angesehen, nur ist das sehr kurz.

    Naja also was ich eig. erreichen wollte ist

    MyClass << "teststring" << myclass::color1;
    

    teststringist ein String und hinter myclass::color1 ist ein enum.

    Ich weiß leider garnicht wie ich daran gehen soll

    std::ostream& operator <<(std::ostream &ostr,Myclass const& myclassinst);
    

    Und dann ?Kein plan.

    Vielen Dank schonmal.



  • Also. 😑

    std::ostream& operator <<(std::ostream &ostr,Myclass const& myclassinst)
    {
        return ostr << myclassinst.get_Variable1() << '\n';
    }
    

    Nicht so schwer, oder.
    Codepad.



  • MyClass& operator << (MyClass& myclass, SomeOtherClass const& other)
    


  • War das echt PI?

    Edit: Ach Nein! Du Armer wurdest doch nicht gebannt?

    @TE: Echt blöd. Als ob Google nicht helfen würde!



  • Ich bin nicht arm, ich wurde zurecht gebannt :'D



  • Ok das von PI war so am nähersten dran.Ich hab jetzt selbst nochmal geschaut.
    So möchte ich, das mein endcode "ist"

    enum COLOR_CODE
    {
    BLACK,WHITE,YELLOW
    };
    
    COLOR_CODE operator<<(COLOR_CODE& CC,std::string x)
    {
     //hier sollte es dann so sein dass es den string einfach nimmt und meine //schon fertige color funktion anwendet
     myclass.setfontcolor(byte Color);
    //hier dann wird das enum CC verarbeitet
    std::cout << x;
    }
    
    COLOR_CODE test;
    test << COLOR_CODE::YELLOW << "TEST";
    

    Ok hab deinen link erst jetzt gesehen.Werd's mir jetzt durchlesen.



  • Ahh ok danke Hacker hab mir deinen Codepad code angesehen und habs jetzt verstanden.Danke man.



  • @TE: einen String in einen COLOR_CODE zu "schieben" sieht reichlich unintuitiv aus. Wozu willst du sowas machen? Operatoren zu überladen nur damit man operatoren überladen hat ist nicht der richtige Weg.



  • Das sieht nicht nur unintuitiv aus, ist auch reichlich unflexibel (immer std::cout).

    Möchtest Du nicht in Wirklichkeit einen Colorcode in einen Stream schieben?

    Oder möchtest Du so eine Art Streamklasse selbst schreiben?

    EDIT:
    Wenn ich die Quelltextkommentare richtig verstehe, erwartest Du bei myClass << COLOR_CODE << "string", dass ein operator<< mit zwei Parametern color_code und string aufgerufen wird? Da bist Du völlig auf dem Holzweg:

    // wird aufgerufen bei myObj << white
    MyClass &operator<<( MyClass& myObj, color_code const& cc )
    {
        myObj.setfont(cc);
        return myObj;
    }
    
    // wird aufgerufen bei (Rückgabe von oben) << "text"
    MyClass &operator<<( MyClass& myObj, string cvonst& text )
    {
        myObj.print(text);
        return myObj;
    }
    

Anmelden zum Antworten