C++ operator= überladen

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 name;
}

int main(int argc, char* argv[])
{
CTest mytest;
mytest.setName(„Hallo“);
string mystring;
mystring = mytest;
cout

Hi Karsten :smile:

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 :smile:

Viele Grüße

Stefan.

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

Automatische Typumwandlung
Hi again :smile:

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(Ctest_object)

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

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

Viele Grüße

Stefan.

Hi Stefan,

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

Karsten