Basisklasse tObject?
-
Hallo,
ich bin gerade dabei C++ zu lernen und habe früher viel mit Delphi gearbeitet. Zur Übung und gewöhnung an die andere Sprache wollte ich mich mal an ein paar einfachen Sachen probieren, wie das Programmieren von typischen Verwaltungsstrukturen Liste, Baum etc. in C++. Jetzt habe ich gleich schon ein Problem: In Delphi konnte ich es so machen, dass ich in meiner Liste ein völlig unbekanntes Objekt speichern konnte, indem ich als Dateityp einfach tObject angegeben habe und es dann erst beim wirklichen benutzen mittels einer Typumwandlung als Objekt dieser Klasse deklarieren musste. Bei C++ habe ich das nun auch versucht indem ich einfach einen Zeiger auf ein Objekt vom Typ void gespeichert habe, allerdings lässt dieses sich später nicht mehr als Objekt einer bestimmten Klasse casten! Gibt es trotzdem eine möglichkeit, wie ich eine universelle Liste schreiben kann, in der ich was auch immer speichern kann, ohne die Liste verändern zu müssen, wenn ich sie zu einem anderen Zweck einsetzen will?
Danke schonmal!
-
In C++ gibt es was viel besseres! Mit Templates kann man typunabhängigen Code schreiben. Der konkrete Typ wird dann bei Bedarf eingesetzt und dann konkreter Code für diesen Typ erzeugt. Ja, klingt erst einmal kompliziert, ist es auch ein bisschen, wenn man es selber macht. Musst du aber nicht! Es gibt zahlreiche fertige Datenstrukturen in der Standardbibliothek, die man sehr komfortabel und mit größtenteils gleichem Interface (zumindest da wo es Sinn macht) benutzen kann.
Zum Beispiel der vielgenutzte std::vector, der ein dynamisch wachsendes Feld darstellt:
#include <vector> // In diesem Header ist Templatecode für std::vector class my_class {}; int main() { std::vector<int> foo; // foo ist nun so eine Datenstrukur in der man ints speichern kann. std::vector<my_class> bar; // in bar kann man Objekte vom Typ my_class speichern }Guck zum Beispiel mal hier:
http://www.cplusplus.com/reference/stl/In C++11 (oder auch in C++98+TR1) sind auch noch ein paar mehr fertige Container dazu gekommen, die auf der Seite nicht aufgeführt sind. Am wichtigsten davon wohl std::array.
Merke: In C++ musst du nur bei hochkomplexen Problemen eigene Datenstrukturen erstellen. Alles was man im Alltag so braucht gibt es schon fertig in der Standardbibliothek und ist für (fast) alle Typen adaptierbar.
-
Noch eine Warnung (bin selbst Borland/VCL geschädigt):
Alle von TObject abgeleiteten Klassen lassen sich nur pernewauf dem Heap erzeugen. In C++ ist das nicht die Regel, sondern eher die Ausnahme. Komm´ also bitte nicht auf die Idee, alle Objekte auf dem Heap zu erzeugen.
-
okay, super, danke. Ich werd mich da mal reinfuchsen
