Den überladenen Zuweisungsoperator der Superklasse verwenden.
-
Helmut.Jakoby schrieb:
Du musst den operator= der Oberklasse aufrufen lassen.
Genau so heißt das Thema. Die Frage ist: wie?
-
DannyLo schrieb:
Becher::operator=(b)So:
Becher::operator=(*this)
-
DannyLo schrieb:
Ich habe versucht
(Becher)(*this) = (Becher)b;aber das geht nicht.
Das ergibt auch keinen Sinn mit den Typen. Wenn dann mit Referenztypen:
(Becher&)*this = b; // b muss man nicht casten // oder besser: static_cast<Becher&>(*this) = b;Mir ist klar, dass ich irgendwie den Bereichoperator anwenden soll, z.B.:
Becher::operator=(b)aber ich komme nicht darauf, wie man das für den Objekt *this macht.
Das this sollte wie immer automatisch mit übergeben werden. Ob du nun
this->Becher::operator=(b);oder so wie du schreibst, spielt keine Rolle.
-
ich bins schrieb:
DannyLo schrieb:
Becher::operator=(b)So:
Becher::operator=(*this)Also,
*this=(b);ist äquivalent zu
*this.operator=(b);Deswegen sind deine Vorschläge leider nicht richtig.
-
Bashar schrieb:
Das this sollte wie immer automatisch mit übergeben werden. Ob du nun
this->Becher::operator=(b);oder so wie du schreibst, spielt keine Rolle.
Wow, das geht ja. Ich habe gar nicht erwartet, dass
Becher::operator=(b);tatsäslich funktioniert, und habe mir deswegen das Leben schwerer gemacht.
Kann mir vielleicht jemand deutlich erklären, warum das so klappt?
-
Verstehe ich dich richtig, dass Du Becher::inhalt nur in Becher& Becher::operator=(const Becher &b) aus b übernehmen willst?
Darum musst Du den Zuweisungsoperator von Becher im Zuweisungsoperator mit b aufrufen und nicht mit this (this soll ja als Unterklasse inhalt von b bekommen.
Edit: Warum hast du nicht deine möglichen Lösungen ausprobiert? Die eine war ja richtig. Siehe mein vorheriges Posting "Du musst den operator= der Oberklasse aufrufen lassen. ".
-
Helmut.Jakoby schrieb:
Verstehe ich dich richtig, dass Du Becher::inhalt nur in Becher& Becher::operator=(const Becher &b) aus b übernehmen willst?
inhalt, und zwei andere Variablen: fassungsvermoegen und fuellgrad.
Helmut.Jakoby schrieb:
Darum musst Du den Zuweisungsoperator von Becher im Zuweisungsoperator mit b aufrufen und nicht mit this (this soll ja als Unterklasse inhalt von b bekommen.
Das ist mir ja klar, aber der Zuweisungsoperator ist immer noch eine Elementfunktion, und ich dachte mir ich muss sie unbedingt für den Objekt *this aufrufen, weil ich nach obigem Schema gedacht habe, dass a=b aquivalent zu **a.**operator=(b) ist.
Helmut.Jakoby schrieb:
Edit: Warum hast du nicht deine möglichen Lösungen ausprobiert?
Wie schon oben erwähnt, ich habe es für unmöglich gehalten, dass die Lösung richtig ist. Das war mein Fehler, tut mir leid.
-
Wenn du std::string statt char* verwenden würdest, könntest du dir den operator= auch komplett sparen.
-
manni66 schrieb:
Wenn du std::string statt char* verwenden würdest, könntest du dir den operator= auch komplett sparen.
Ich hatte eine bestimmte Aufgabenstellung.
-
http://www.cppbuch.de/cppbuchw.tgz
herunterladen und entpacken. Im Verzeichnis cppbuch/k9/zuweisung_vererbung ist ein vollständiges Beispiel, sogar mit 3 Vererbungsebenen und char* Attributen.