C++ operator= überladen

Von: , Frage gestellt am Do, 17. Mai 2001

Hi,
ich habe ein Problem. Ich möchte den Operator = (assignment) so überladen, dass er einen string als L Wert hat. Geht das?

Mein Versuch:

class CTest{
private:
int i;
string name;
CIntern intern;
public:
CTest(){std::cout << "Konstruktoraufruf"<<endl;}
CTest(string extName):name(extName) {}
CTest(const CTest& h)
{ name += "1"+h.name; i = h.i; }
void setName(string extname){name = extname;}

string operator=(const CTest&);
};

string CTest::operator=(const CTest&)
{
return this->name;
}

int main(int argc, char* argv[])
{
CTest mytest;
mytest.setName("Hallo");
string mystring;
mystring = mytest;
cout << mystring.c_str();
}

4 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde 0 hilfreich
    Re: C++ operator= überladen

    Hi Karsten :) ich habe ein Problem. Ich möchte den Operator = (assignment)
    so überladen, dass er einen string als L Wert hat. Geht das?
    Ja, das geht. Es gibt eine Art Standard, wie man den = Operator überladen sollte.

    CTest& CTest::operator = (const CTest &rhs)
    {   //Do your assignment
    return *this;
    }
    

    Es kann wichtig sein, eine Zuweisung an sich selbst gesondert zu behandeln. Evtl. musst du also prüfen, ob *this und rhs (right hand side) identisch sind. Wichtig ist, dass du eine Referenz auf *this zurückgibst. In dieser Form fügt sich dein = Operator nahtlos in C++ ein. Jetzt sind z.B. Anweisungen der Form a= b= c möglich :)

    Viele Grüße

    Stefan.

    • Antwort von nach einer Stunde 0 hilfreich
      Re^2: C++ operator= überladen

      Hi Stefan,

      Danke erstmal für die Hilfe. Allerdings hast du mich nicht so ganz verstanden. Ich hab in der Klasse CTest einen string (char*) den ich als string (C++) +bergeben möchte. Etwa so:

      CTest myclass("Hallo Stefan");
      string str;
      str = myclass;

      myclass soll dann der string aus der Klasse zugewiesen werden.
      Geht sowas?


      Gruß aus Dssd
      Karsten

      • Antwort von nach 4 Stunden 1 hilfreich
        Automatische Typumwandlung

        Hi again :)

        Also, den = operator sollte man nach Möglichkeit nicht anders überladen, als ich es in meinem vorigen Posting geschrieben habe. Wenn ich dein Problem nun richtig verstehe, dann möchtest du auch gar nicht den = Operator überladen, sondern eine automatische Typumwandlung von CTest nach str durchführen. Das geht so:

        class CTest
        {   int i;
        string name;
        CIntern intern;
        public:
        ...
        operator str& ();
        }
        CTest::operator str& ()
        {    return name;
        }
        

        Damit hast du eine automatische Typumwandlung

        static_cast<str&>(Ctest_object)

        realisiert, und Zuwesungen des Typs str= CTest_object sollten funktionieren :)

        Hoffe, dass ich es jetzt kapiert habe, was du wolltest :)

        Viele Grüße

        Stefan.

        • Antwort von nach 4 Tagen 0 hilfreich
          Re: Automatische Typumwandlung

          Hi Stefan,

          vielen Dank - endlich weiss ich was ich gesucht habe. Es funktioniert in der Tag - nochmals Danke.

          Karsten

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!