Überladene Opertoren hintereinander benutzen



  • Hi, mal ne Frage.
    Wie kann ich operatoren so überladen, dass ich sie nacheinander benutzen kann?
    Wie zum Beispiel

    int a=1+2+3;
    

    , anstatt

    int a=1+2,b=a+3;
    

    .
    Oder

    cout<<"Erster String"<<endl<<"Zweiter String";
    

    Ich habs an einer Klasse, die einen String speichert versucht, aber es benutzt immer nur das erste, was ich angebe. 😞

    Hier ist der Code

    #include<iostream>
    #include<cstring>
    using namespace std;
    
    class CText
    {
    private:
        char m_acText[1024];
    public:
        CText()
        {
            strcpy(m_acText,"");
        }
        char * getBuffer()
        {
            return(m_acText);
        }
        void operator<<(CText &t)
        {
            strcat(m_acText,t.m_acText);
        }
    
        CText operator<<(char *s)
        {
             strcat(m_acText,s);
             return(*this);
        }
    };
    
    int main()
    {
    	CText Text;
    	Text<<"Hallo"<<" Welt!";
    
    	cout<<Text.getBuffer()<<endl;
    	return(0);
    }
    

    Hat jemand ne Idee was ich falsch mache? Ich weiß dass es einfach ist, ich komm bloß nicht drauf



  • der operator<< sollte eine Referenz, anstatt einer Kopie zurück geben.



  • Tausend Dank! 👍
    Ging aber schnell!



  • Airdamn schrieb:

    der operator<< sollte eine Referenz, anstatt einer Kopie zurück geben.

    Und zwar beide Versionen 😉

    übrigens solltest du auch eine const-Referenz als Parameter übernehmen:

    CTest& operator<<(const CTest& t)
    {
      strcat(m_acText,t.m_acText);
      return *this;
    }
    

    (und anstelle des char-Arrays würde ich lieber std::string verwenden)


Anmelden zum Antworten