Kann man in C++ eine Klasse erzeugen, die ein Objekt dieser Klasse beinhaltet? Also in etwas so:
1 | class Test |
2 | {
|
3 | public:
|
4 | Test A; |
5 | |
6 | };
|
|
Forum: PC-Programmierung C++ : kann eine Klasse ein Object von sich selbst haben?Kann man in C++ eine Klasse erzeugen, die ein Objekt dieser Klasse beinhaltet? Also in etwas so:
:
Verschoben durch Moderator
Harald schrieb: > Kann man in C++ eine Klasse erzeugen, die ein Objekt dieser Klasse > beinhaltet? Rein interessehalber: wenn das ginge, bei welcher "Rekursionstiefe" würdest Du abbrechen wollen? Du kannst ein statisches Objekt von der Klasse selbst definieren, also
Überleg mal, wie groß eine Instanz davon wäre... wie einer bereits schon schrieb, mit einem pointer auf das objekt geht es schon.
:
Bearbeitet durch User
Dr. Sommer schrieb: > Überleg mal, wie groß eine Instanz davon wäre... ... und unterscheide dabei zwei Fälle: Fall 1: Test ist so deklariert wie oben. Fall 2: Test enthält neben A noch ein weiteres Element, bspw. ein char. :) Und wozu wäre eine solche Klasse gut? Ben W. schrieb: > wie einer bereits schon schrieb, mit einem pointer auf das objekt geht > es schon. Oder auch eine Referenz. Für beides gibt es auch genügend sinnvolle Anwendungen. stehe ich hier auf dem Schlauch (komme aus der Java-Welt), oder wäre so etwas in C++ wirklich ein Problem?
Oder ist hier folgendes gemeint (in Java-Notation)?
Achim H. schrieb: > stehe ich hier auf dem Schlauch (komme aus der Java-Welt), oder wäre so > etwas in C++ wirklich ein Problem? Natürlich nicht. Eine verkettete liste macht man aber mit Zeigern. Ich gebe Dir mal ein Beispiel:
:
Bearbeitet durch User
Achim H. schrieb: > stehe ich hier auf dem Schlauch (komme aus der Java-Welt), oder wäre so > etwas in C++ wirklich ein Problem? > class TreeNode > { > public: > TreeNode leftNode; > TreeNode rightNode; > }; Ja den in Java sind alle Typen abseits von Standardtypen wie int, long Referenztypen, Java legt dir damit deine Member auf Objekte von Klassentypen als Referenzen an. In C++ gibt es aber nur Wertetypen (im Java/C#-Sprech) und legt sozusagen die Objekte in das tragende Objekt selbst hinein. Das funktioniert hier natürlich nicht, weil das eine unauflösbare Rekursion darstellt, in Java ist es kein Problem da nur Referenzen, die ja zudem auch null sein können. Hier noch eine schönere Version, die auch kompiliert.
Danke für die Antworten. Kurz zum Hintergrund meiner Frage: Jeder kennt ja die Möglichkeit bei z.B. Powerpoint, Ojekte zu gruppieren. Diese kann man dann mehrfach kopieren und dann wieder zu neuen Objekten gruppieren. Jetzt suche ich nach einer Art Design-Pattern für C++. Man müsste quasi eine Klasse "Panel" machen, bei der man graphische Objekte wie z.B. Kreise und Dreiecke und eben auch wieder Panels hinzufügen könnte:
Harald schrieb: > Man müsste quasi eine Klasse "Panel" machen, bei der man graphische > Objekte wie z.B. Kreise und Dreiecke und eben auch wieder Panels und wo hast du damit ein Problem? Verwende doch einfach Zeiger (SmartPointer) und gut ist. Es ist eh sinnlos Objekte ständig zu kopieren. Harald schrieb: > Man müsste quasi eine Klasse "Panel" machen, bei der man graphische > Objekte wie z.B. Kreise und Dreiecke und eben auch wieder Panels > hinzufügen könnte: Dann lege eine (abstrakte) Basisklasse an, die einen Container für Objekte von "sich selbst" enthält. Die Inhaltstypen erben dann davon und bei den Klassen am Ende vom Baum blendest Du den (Zugriff auf den) Container aus. Suche vielleicht mal nach "Composite Pattern " >Suche vielleicht mal nach "Composite Pattern "
Guter Tipp, das könnte passen.
Achim H. schrieb: > stehe ich hier auf dem Schlauch (komme aus der Java-Welt), oder wäre so > etwas in C++ wirklich ein Problem? In Java ist jedes Symbol nur ein Zeiger auf ein Objekt. In C++ ist das bei gleicher Syntax immer ein Objekt:
In Java sind obj1 und obj2 zwei Zeiger auf das selbe Objekt. In C++ sind obj1 und obj2 zwei unterschiedliche Objekte, die den gleichen Wert haben (sollten). Ähnliches Verhalten erhältst Du in C++ mit Zeiger, Referenzen und Smart-Pointern.
Beitrag #5138098 wurde von einem Moderator gelöscht.
Beitrag #5142608 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
|
|