assign()-method



  • Ich lese gerade "Der C++ Programmierer" von Ulrich Breymann.
    Nun bin ich auf Seite 396 (falls jemand das Buch hat) und frage mich, ob ich von nun an in jede Klasse eine solche virtual assign() - method verwenden soll, um einen polymorphen Zuweisungsoperator zu implementieren.
    Also:

    virtual Class& assign(const firstBaseClass& other) 
    {
        Class temp(static_cast<Class>(other)) ;
        swap(temp);
        returm *this;
    }
    

    Danke und Entschuldigung für die Störung.



  • In polymorphen Klassen braucht man selten Zuweisungsoperatoren.
    Und ich würde dir auf jeden Fall raten keine Funktionen zu machen die einen "ungecheckten" Downcast machen, ohne dass der Name der Funktion dies klar zum Ausdruck bringt.

    Also...

    CPP-Questionmaker schrieb:

    frage mich, ob ich von nun an in jede Klasse eine solche virtual assign() - method verwenden soll, um einen polymorphen Zuweisungsoperator zu implementieren.

    Nein, würde ich dir nicht empfehlen.

    ps:
    Mit static_cast<Class> verstehe ich nicht was der Code machen soll. Ich bin daher mal von static_cast<Class const&> ausgegangen. Falls da wirklich static_cast<Class> steht... keine Ahnung.



  • Das Buch habe ich auch. hustbaer hat recht: da steht static_cast<Class const&> im Buch. Der TE hat sich vertippt. Der zuweisungsoperator von Class sieht so aus:
    Class& operator=(const Class& rhs) { return assign(rhs);}
    Damit wird der richtige Typ übergeben. static_cast stellt sicher, dass der Compiler den richtigen Typ sieht. Der Compiler kann nicht den Typ zur Laufzeit erkennen. Da assign virtual ist, gilt const firstBaseClass& auch für abgeleitete Klassen. In polymorphen Klassen braucht man selten Zuweisungsoperatoren - aber wenn man sie braucht, genügt der systemerzeugte Zuweisungsoperator nicht, wenn man mit Referenzen oder Zeigern auf die Basisklasse arbeitet. Das wird im Buch gezeigt. Am einfachsten ist es, die Zuweisung zu verbieten, wenn man sie nicht braucht.


Log in to reply