C++: pochopení přetížených operátorů

sobol8

C++: pochopení přetížených operátorů
« kdy: 22. 05. 2014, 11:35:05 »
Dobrý den,

měl bych ještě jeden dotaz:

Když mám například:

Kód: [Vybrat]
objekt& objekt:operator=(objekt& o)
{
   //nejake kopirovani
   return *this;
}

Jakým způsobem prosím postupovat pro správné pochopení toho, co ten první řádek znamená? Týká se to pouze pravé strany výrazu přiřazení?

Děkuji
« Poslední změna: 23. 05. 2014, 09:12:21 od Petr Krčmář »


Sten

Re:C++ - navod na cteni a spravne pochopeni pretizenych operatoru
« Odpověď #1 kdy: 22. 05. 2014, 15:38:56 »
Tohle je operátor, který se aplikuje pro příkaz a = b; Přeloží se jako volání a.operator =(b).

Jinak přiřazovací operátor by měl mít jako parametr konstantní nebo rvalue referenci, případně (u typů podporujících swap) hodnotu:
Kód: [Vybrat]
objekt& objekt::operator =(const objekt& o);
objekt& objekt::operator =(objekt&& o);
objekt& objekt::operator =(objekt o);
Nekonstantní reference nedává pro přiřazovací operátor smysl*.
* C++ nijak neomezuje, co ten operátor má dělat, proto tam lze mít i nekonstantní referenci a předávaný objekt měnit, ale je vhodné to v zájmu zachování přehlednosti programu nedělat

kaiten

Re:C++ - navod na cteni a spravne pochopeni pretizenych operatoru
« Odpověď #2 kdy: 22. 05. 2014, 15:49:04 »
Kód: [Vybrat]
object & operator=(object && o)
{
    if (this == &o)
         return *this;
    this->~object();
    /* ------- */
    return *this;
}
Konstantní reference není jediná možnost ... R-value můžeme poslat i takto.