Objekte in Array ablegen
-
Hallo,
ich suche eine C++-Entsprechung zu dem Objekt ArrayList aus Java. Ich möchte mehrere Objekte in einem Array speichern, so dass ich nachher die Methoden der Objekte nacheinander aufrufen kann. Unter Java ging das (verkürzt) so:ArrayList liste = new ArrayList;
liste.add(new MeinObjekt(bla)));Auf ein Objekt in dieser ArrayList kann man dann z.B. so zugreifen:
MeinObjekt test = (MeinObjekt) liste.get(index);
Ich hoffe es ist klar was ich brauche, wie gesagt ich suche eine Möglichkeit, das so änlich (oder besser!) in C++ hinzukriegen. Ein kleines Problem: Unter Java musste ich immer den Objekttyp angeben (casten), da ich aber versch. Objektklassen in diese Liste bringen will, frage ich mich, ie kann man so was machen. Kann man nicht irgendwie automatisch festsellen, von welcher Klasse ein Objekt im Array ist?
Danke für eure Hilfe schonmal,
Tom
-
vector<Foo> vec;
vec.push_back(Foo(a,b,c));
cout<<vec[0];
einfach vector, list, map, deque, etc. verwenden
-
Danke! So wie ich das verstanden habe ist dieser Vektor dann aber auf Objekte der Klasse Foo beschränkt oder?
Tom
-
elektrohirn schrieb:
Danke! So wie ich das verstanden habe ist dieser Vektor dann aber auf Objekte der Klasse Foo beschränkt oder?
Jup.
Eine heterogene Menge kannst du z.B. durch einen Container der "Zeiger-auf-Basisklasse" verwaltet umsetzen.Kann man nicht irgendwie automatisch festsellen, von welcher Klasse ein Objekt im Array ist?
Man kann sowas Fragen wie "Hallo Objekt. Bist du zufällig eine Instanz der Klasse Foo?". Sowas sollte man sich allerdings möglichst verkneifen. Wenn man den konkreten Typ eines Objekts braucht, ist es äußerst fragwürdig es vorher in eine Container zu packen, der nur Basisklassenzeiger verwaltet.
Sicher das du dein Problem nicht mit virtuellen Methoden bzw. mehreren Containern die konkretere Typen verwalten eleganter lösen kannst?
-
Ja hab mir auch schon gedacht praktisch für jeden Objekttyp (sind ja nur 6 bei mir) einen eigenen Vektor zu nehmen. Hab's jetzt soweit umgesetzt, bekomme aber immer die Fehlermeldung
cobj_container.h:30: error: ' vector' is used as a type, but is not defined as a type.
meine .h schaut so aus:
#include<cobj_ellipsoid.h>
class cobj_container{
public:
vector<cobj_ellipsoid> cobjects;public:
cobj_container();
~cobj_container();void cobj_container::add_cobj(float obj_pos[3], float obj_size[3], float obj_rot[3]);
bool cobj_container::chk_clsn(float chk_pos[3]);
};#endif
und die entsprechende .cpp sieht so aus:
#include "cobj_ellipsoid.h"
#include "cobj_container.h"cobj_container::cobj_container()
{
vector<cobj_ellipsoid> cobjects;
}cobj_container::~cobj_container()
{}void cobj_container::add_cobj(float obj_pos[3], float obj_size[3], float obj_rot[3])
{
cobjects.push_back(cobj_ellipsoid(obj_pos, obj_size, obj_rot));
}bool cobj_container::chk_clsn(float chk_pos[3])
{
for(int i = 0; i <= cobjects.size(); i++)
{
cout << i;
}
return false;
}Wäre für jede Hilfe dankbar!
Tom
-
vector liegt im namensraum std. Weiters musst du <vector> #includen.