Vererbungsfrage
-
in Zeile 26 erstellst du eine Kopie von B.
Das B in Foo ist danach ein anderes wie das B in der main.
Mach Zeile 17 zu Base &b, dann sollte es so gehen, wie du denkst.greetz KN4CK3R
-
Okay, hat soweit geklappt, danke. Ich musste nur beim Konstruktor von Foo direkt noch die Initialisierung von b anhängen:
Foo::Foo(Base &b) : b(b) {Irgendwie aber sagt mir mein Gefühl, dass das Ganze nicht wirklich schön ist? Oder ist es schön? Ich würde mir ungern unschönes Design angewöhnen...
-
solange irgendwann dokumentiert ist, dass das Objekt B durch Foo verändert wird, ist das schon in Ordnung
greetz KN4CK3R
-
KN4CK3R schrieb:
solange irgendwann dokumentiert ist, dass das Objekt B durch Foo verändert wird, ist das schon in Ordnung
greetz KN4CK3R
Zur Not zu erkennen am Konstruktor (const correctness)
-
camper sagt, Referenzen als Member-Variablen sind schlechtes Design- und camper ist hier der king.
-
Um das nochmal klar zu stellen: a.b und B sind zwei verschiedene Objekte. Du machst im wesentlichen nichts anderes als
int x; int y; y = x; x = 910; cout << y;und wunderst dich, dass, wenn du y ausgibst, da nicht garantiert 910 rauskommt.
Fiedl schrieb:
Was ich will:
Ich will die Werte des Integer-Arrays aus "Base" mit der Klasse "Foo" manipulieren ohne Vererbung. Muss ich hierfür das "Base"-Objekt im Konstruktor von "Foo" der Klasse übergeben?Das mit der Referenz (wie vorgeschlagen) ist eine Option. Alternativ kannst du in Foo eine Zeigervariable definieren und übergibst dem Konstruktor die Adresse von B, so dass diese im Zeiger gespeichert werden kann:
... class Foo { private: Base* zeiger; public: explicit Foo(Base* p); void setValue(int v, int x) { b->values[v] = x; } }; Foo::Foo(Base* p) :ptr(p) {} int main() { Base B; Foo a(&B); // Adresse holen und übergeben ...
-
Sone schrieb:
camper sagt, Referenzen als Member-Variablen sind schlechtes Design- und camper ist hier der king.
Irgendwie bin ich mir sicher, dass er das nicht so absolut pauschal gesagt haben wird...
-
pumuckl schrieb:
Sone schrieb:
camper sagt, Referenzen als Member-Variablen sind schlechtes Design- und camper ist hier der king.
Irgendwie bin ich mir sicher, dass er das nicht so absolut pauschal gesagt haben wird...
Nein hat er nicht, da hast du natürlich Recht. Ich such gleich den Link raus.
-
camper schrieb:
[...]
Allerdings sind Referenzen [...] ohnehin in fast allen Klassen deplaziert.http://www.c-plusplus.net/forum/p1815796, dritter Post.
-
pumuckl schrieb:
Sone schrieb:
camper sagt, Referenzen als Member-Variablen sind schlechtes Design- und camper ist hier der king.
Irgendwie bin ich mir sicher, dass er das nicht so absolut pauschal gesagt haben wird...
Jedenfalls betrachte ich es nicht als Designfrage.
-
Sone schrieb:
camper schrieb:
[...]
Allerdings sind Referenzen [...] ohnehin in fast allen Klassen deplaziert.http://www.c-plusplus.net/forum/p1815796, dritter Post.
camper schrieb:
Meine Aussage war auch primär eher an weniger Erfahrene gerichtet
Später in dem Thread

Außerdem:
camper schrieb:
Proxies: da diese Referenzen imitieren, überrascht hier nicht, dass Referenzen als Member verwendbar sind, da Kopier- und Zuweisungssemantik auseinanderfallen.
Und in diesem Thread verhält sich Foo ähnlich einem Proxy für das Base-Objekt, das der Ctor übergeben bekommt.
Hier handelt es sich also um einen der Fälle, die camper in seiner nicht-Design-Aussage explizit nicht gemeint hat
