Klasse als Eigenschaft einer Klasse soll auf Mutter-Klasse zugreifen
-
Hi,
das mit der Mutter hört sich jetzt so nach Vererbung an, aber eigentlich möchte ich da nicht hin.
Ich habe eine Klasse ClassA die eine Eigenschaft ClassB hat. Einige Methoden von ClassB benötigen jedoch Eigenschaften aus ClassA. Das ganze sieht in etwa so aus (Konstruktoren spare ich mir mal):class TClassB { void Do(); }; class TClassA { String txt; TClassB *ClassB; } void TClassB::Do() { txt = "Hallo Welt! Hier ist ClassB"; }
Wie greife ich in der Methode auf die Eigenschaft der übergeordneten Klasse zu?
-
Hallo
Es gibt keine technische "Mutterklasse". Du must also der Klasse TClassB auch noch einen Zeiger auf die Instanz der Klasse TClassA geben, um zusätzlich zu der Beziehung TClassA -> TClassB noch die Beziehung TClassB -> TClassA zu implementieren.
Um einer weiteren Frage vorzubeugen : Dafür wirst du dich informieren müßen was Forward Declarations sind und warum du sie in deinem Fall einsetzen must.bis bald
akari
-
Und wie sieht es mit sowas aus:
class TClassB :: public TClassA { TClassA *ClassA; void Do(); }; class TClassA { String txt; TClassB *ClassB; } void TClassB::Do() { txt = "Hallo Welt! Hier ist ClassB"; }
Durch die vererbung erhalte ich die Eigenschaften, jetzt muss ich nur noch meine ClassA-Instanz ind die entsprechende Eigenschaft von ClassB bekommen (kann man dem Konstruktor nicht einen Pointer von Haus aus mitgeben?)...
-
Hallo
kann man dem Konstruktor nicht einen Pointer von Haus aus mitgeben?
Ja, wenn du den Konstruktor entsprechend erweiterst.
bis bald
akari
-
Jetzt hat das aber nen blöden Nebeneffekt. Ich kann in ClassB folgende zwei Aufrufe starten:
String x = this->txt; String y = this->ClassA->txt;
Das sind jetzt aber nicht beides die selben, oder?
-
Hallo
Nein die txt-Variablen sind natürlich nicht aus der gleichen Instanz.
Dieser Effekt kommt nur weil du noch die Vererbung eingebaut hast, die eigentlich in deinen ersten Beispiel nicht vorgesehen war.bis bald
akari
-
Und durch die Vererbung hab ich versucht, was zu gewinnen. Aber außer Speicherverlust kann ich dadurch glaub ich nix gewinnen, oder?
Vererbung ist als Lösung nicht ausgeschlossen...
-
Hallo
Was wolltest du denn gewinnen? Und warum? Ob Vererbung in deinem Fall eine Lösung ist kann ich nicht sagen, das hängt von deinem konkreten Ziel ab. Auf keinen Fall solltest du es als Umgehung eines Problems mit einem Konzept benutzen, das gar keine Vererbung erfordert.
bis bald
akari
-
Mein Problem hab ich ja beschrieben: eine Klasse hat ein Objekt einer zweiten Klasse als Eigenschaft. Diese wiederum soll auf Eigenschaften der ersten Klasse zugrifen können.
Meines Erachtens ist das kein Fall für Vererbung, möchte aber nicht ausschließen, dass es da elegantere Lösungen gibt, die das mit Vererbung machen.
-
Hallo
Dann las die Vererbung weg und lies dir nochmal meine Hinweise aus meinem ersten udn zweitem Post durch. Da hab ich doch schon alles gesagt.
bis bald
akari
-
Genauso hab ich es gemacht
Das mit den Forward Declarations ist mir noch nicht ganz klar. Vielleicht hab ich es unbewusst schon richtig gemacht, aber was genau sind das? In meinem Buch gibts da nur nen kurzen Hinweis zu, der sagt mir aber nicht viel...
-
-
So hab ich's schon gemacht