operator* von in Klasse definiertem operator*= aufrufen



  • Hi,

    ich schreibe mir gerade eine Klasse, bei der ich mich Frage, ob ich aus dem operator*=() heraus den außerhalb der Klasse definierten operator*() aufrufen könnte, um Code zu sparen.

    Diese Definition:

    Klasse& operator*= (const Klasse& k)
    	{
    		// Viel Code
    		return *this;
    	}
    

    wird zu...

    Klasse& operator*= (const Klasse& k)
    	{
    		this = operator* (this, k);
    		return *this;
    	}
    

    Unter der Annahme, dass dieser Operator existiert:

    Klasse operator* (const Klasse& k1, const Klasse& k2)
    {
    	Klasse neueKlasse;
    	// ...
    	return neueKlasse;
    }
    

    Vorallem weiß ich nicht so recht, was hier passiert:

    this = operator* (this, k);
    

    Ich weiße dem this Zeiger einfach ein neues Objekt zu. Was passiert mit dem alten? Das von operator* zurückgelieferte Objekt liegt doch außerdem ganz wo anders, also es wäre sowieso generell gut, wenn mir jemand erklären könnte, was hier genau passiert. Und dann natürlich, ob das alles so "legal" ist. 🙂



  • Du musst den this Zeiger dereferenzieren:

    *this = operator*(this, k);
    //oder
    *this = *this * k;
    


  • Ratespiel schrieb:

    ich schreibe mir gerade eine Klasse, bei der ich mich Frage, ob ich aus dem operator*=() heraus den außerhalb der Klasse definierten operator*() aufrufen könnte, um Code zu sparen.

    Die Idee ist gut, aber besser ist es andersrum: Den außen definierten Operator mithilfe des *= Operators zu definieren:

    Klasse operator*(const Klasse& a, const Klasse& b) {
      Klasse temp(a);
      temp += b;
      return temp;
    }
    


  • OK, danke euch beiden. Bashar, du musst jetzt aber noch begründen, warum das so besser ist!



  • Weniger temporäre Objekte.


Anmelden zum Antworten