Zeiger auf Objekt an Objekt selbst übergeben?
-
ok danke
dann werd ichs einfach mal machen
-
Kleiner Tipp für die eigene Adresse:
this
-
Naja das ist ja nur ne Nebensache. Ein Knoten soll sich nicht mit sich selbst verbinden, sondern vorrangig mit anderen
Das mit der eigenen Andresse war nicht so ernst gemeint
-
Also quasi this+1 und this-1 wobei du die Grenzen einhalten musst? Naja... Sauber ist anders.
Kannst die "Nebenklassen" ja in einem Container der Hauptklasse ablegen und eine Referenz auf eben jenen Container an den Konstruktor der Nebenklasse geben oder ähnliches.
-
Nee also
this+1
und
this-1
würde mir nie im Traum einfallen
Ich mach das schon ordentlich
-
sind die Unterklassen denn vom selben Typ?
wenn es dir um eine Baumstruktur geht, kannst du ja den parent und eine liste mit den child-elementen anlegen.
void Unterklasse1::setParent( AbstrakteOberKlasse* parent ) { if ( !parent ) { return; } this->_parent = parent; parent->_childItems.append( this ); }
andernfalls gibst du jeder Unterklasse im Konstruktor einen Pointer zur Oberklasse mit. Ueber den kannst du ja dann in den Unterklassen auf die jeweils anderen Unterklassen zugreifen.
-
mhmh das mit dem parent klingt auch gut
danke euch für eure Ideen
-
Ich hab nun das Problem, dass jede Klasse die andere braucht. Allerdings bekomm ich jetzt die (zu erwartende) Fehlermeldung, dass im Konstruktur der Klasse B (wo der Zeiger auf Objekte der Klasse A übergeben wird) die Klasse A nicht bekannt ist.
Der Compiler braucht zum Kompilieren vom Klasse A die Klasse B und zum Kompilieren der Klasse B braucht er Klasse A - ein Teufelskreis...
Klasse A:
class A { // C-TOR, D-TOR ... private: B *objekte_B;
Klasse B:
class B { // C-TOR, D-TOR ... private: A *objekte_A;
wie macht man sowas am geschicktesten? (falls das überhaupt irgendwie geht)
bin grad etwas ratlos.
-
Um es nochmal genauer zu erklären:
Die Klasse A ist in dem Fall die Knoten-Klasse und die Klasse B die Kanten-Klasse ist.
Logischerweise benötigt somit jeder Knoten Informationen über alle Kanten die von ihm weg gehen. Wenn ich ein Signal von einem Knoten zum anderen übertragen will muss ich es zuerst an die Kante weitergeben, die das Signal wiederum an den Ziel-Knoten weitergibt (wozu sie wieder die Knotenklasse kennen muss).Ich weiß dass es auch andere Lösungen gibt, aber ich würde es gern so machen, wie beschrieben.
-
Das ist wohl eines der ersten "richtigen" Designprobleme, denen man sich in C++ stellen muss
Falls die eine Klasse nur Zeiger bzw. Referenzen auf die andere besitzt, kannst du eine Vorwärtsdeklaration machen:
class B; // Vorwärtsdeklaration - Name "B" wird bekanntgemacht class A { B* ptr; // A hat Zeiger auf B - geht, weil Zeigergrösse immer gleich }; class B { A obj; // B darf Objekte von A haben, weil A schon definiert wurde };
Klassen, die gegenseitig Objekte voneinander haben, sind nicht möglich, weil jeweils die andere Klasse noch nicht definiert wurde, und der Compiler deshalb die Grösse nicht kennt. Zeiger dagegen brauchen unabhängig vom Zieltyp immer gleich viel Speicherplatz (normalerweise 4 Byte). Aber dieser Fall sollte bei gutem Design sowieso nicht vorkommen.