operator = in abgeleiteter Klasse
-
hmm...sceint wirklich nicht so ganz zu klappen...
-
Ja, ich hätt genauer nachlesen sollen ..
So is es jetzt wirklich richtig:class Variable; class AbstractTerm { protected: virtual bool equals(const AbstractTerm&) const = 0; virtual bool equals(const Variable& ) const = 0; // für alle weiteren Derived Klassen auch // so eine Methode bereitstellen friend bool operator ==(const AbstractTerm&, const AbstractTerm&); }; class Variable : public AbstractTerm { protected: virtual bool equals(const AbstractTerm& other) const { return other.equals(*this); } virtual bool equals(const Variable& other) const { return name == other.name; } // .. }; bool operator ==(const AbstractBase& a, const AbstractBase& b) { return a.equals(b); }
Problem war vorher, dass die Überladung von equals in AbstractTerm nicht
bekannt war, also wurde sie auch in keiner abgeleiteten Klasse aufgerufen
-> EndlosrekursionSo is es jetzt natürlich auch nicht mehr ganz schön, da die AbstractTerm
Klasse alle abgeleiteten kennen muss ..Mehr dazu kannst in Mehr effektiv C++ nachlesen, Item 31.