Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: sobol8 22. 05. 2014, 11:35:05

Název: C++: pochopení přetížených operátorů
Přispěvatel: sobol8 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
Název: Re:C++ - navod na cteni a spravne pochopeni pretizenych operatoru
Přispěvatel: Sten 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
Název: Re:C++ - navod na cteni a spravne pochopeni pretizenych operatoru
Přispěvatel: kaiten 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.