Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

operator= in C++???

(Anonym) / 3 Antworten / Baumansicht Nickles

Warum gibt der operator= eine Referenz zurück und nicht den eigentlichen Wert? Ich versteh das nicht so ganz!

bei Antwort benachrichtigen
(Anonym) Nachtrag zu: „operator= in C++???“
Optionen

"=" ist ein Zuweisungoperrator, dass ist hoffentlich klar.
ein kleines beispiel:

void main(void)
{
int a,b;
b = 5;

a = 4 + 5 * b;
}

das ergebnis hierbei wäre (25 + 4) = 29.
"=" wäre die Referenz aus der Rechung
ich habe mal einen schönes satz gelesen, der glaub ich deine frage beantworten sollte:

"MAN NIMMT DEN WERT AUF DER RECHTEN SEITE UND SPEICHERT IHN IN DER VARIABLE AUF DER LINKEN SEITE UND GIBT DEN resultierend WERT UND TYP DES AUSDRUCKS AUF DER LINKEN SEITE ZURÜCK"

bei Antwort benachrichtigen
(Anonym) Nachtrag zu: „ ist ein Zuweisungoperrator, dass ist hoffentlich klar. ein kleines beispiel:...“
Optionen

Ja aber ich kann doch selber einen operator= deklarieren, der void zurück gibt und keine Referenz. Trotzdem funktioniert eine Zuweisung mit diesem selbstgemachten Operator!

Beisp:
void CTreeCursor::operator =(const CTreeCursor& posSrc)
{
   if(&posSrc != this)
   {
    m_hTreeItem = posSrc.m_hTreeItem;
    m_pTree = posSrc.m_pTree;
   }
}

bei Antwort benachrichtigen
Ben Horne (Anonym) „Ja aber ich kann doch selber einen operator deklarieren, der void zurück gibt...“
Optionen

Deswegen bleibt aber trotzdem die Rechtsassoziativität bestehen!
Eine Zuweisung '=' ist rechtsassosiativ weil der operator= etwas liefern muß, was selber auf der rechten Seite einer Zuweisung stehen darf!

Sonst würde ja auch keine Verkettung funktionieren:
void Verkettung( int wert1, int wert2, int wert3, int wert4)
{
   wert1 = wert2 = wert3 = wert4;
}

Der Compiler macht daraus mathematisch gesehen folgendes:
wert1 = ( wert2 = ( wert3 = wert4 ) )

Wie Klammern aufgelöst werden, solltest du ja in der Schule gelernt haben :-)

bei Antwort benachrichtigen