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
    -> Endlosrekursion

    So 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.


Anmelden zum Antworten