Seite 1 von 2

Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 7:41 pm
von canlot
Ich arbeite hier grade das C++ Tutorial durch. Mein Feedback an Xin ;) Soweit gut vielleicht etwas weniger Fachchinesisch und mehr Grundlagen und Funktionen der Basiclibrary wie String e.t.c .
Zur Testzwecken will ich mehrere einfache Objekte im Laufe des Programmes dynamisch erstellen genauso wie Zeiger halt. Nur wie macht man das mit Objekten???

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 7:54 pm
von cloidnerux
Mich wundert das du zwar Objektorientierung lernst, aber nicht da Dynamische anlegen von Objekten.
So als hinweis, such mal nach dem Operator "new" und "delete"

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 8:16 pm
von canlot
Ich glaube du hast mich nicht verstanden :P ich kenne new und delete. nur wie lege ich 10,20,30 solche Objekte an.
z.B.
while(i<10)
{
klasse bla = new klasse();
}

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 9:34 pm
von cloidnerux
Mit ne wund delete legst du neue Klassen an, erhälst aber einen Klassenpointer, weswegen dein Code so nicht funktionierend dürfte. Wenn du weiterhin Zugriff auf die Objekte haben willst, musst du zusehen, das du dir jede einzelne Referenz speicherst, z.B in einer Liste.

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 9:42 pm
von canlot
cloidnerux hat geschrieben:Mit ne wund delete legst du neue Klassen an, erhälst aber einen Klassenpointer, weswegen dein Code so nicht funktionierend dürfte. Wenn du weiterhin Zugriff auf die Objekte haben willst, musst du zusehen, das du dir jede einzelne Referenz speicherst, z.B in einer Liste.
Beispiel wie?? ;)

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 9:45 pm
von cloidnerux

Code: Alles auswählen

vector<&classA> classes();
for(int i = 0; i < 10; i++)
{
    classes_push_back(new classA());
}
So in etwa und es ist wrsl noch falsch, weil seit längeren kein C++ mehr Programmiert habe.

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 10:10 pm
von nufan
canlot hat geschrieben:Ich glaube du hast mich nicht verstanden :P ich kenne new und delete. nur wie lege ich 10,20,30 solche Objekte an.
z.B.

Code: Alles auswählen

while(i<10)
{
 klasse bla = new klasse();
}
Du bist nah dran ^^

Code: Alles auswählen

klasse *bla = new klasse();
"new" gibt dir nämlich einen Zeiger auf das Objekt zurück. Jetzt musst du deine Zeiger aber noch speichern, sonst hast du keinen Zugriff auf die Objekte. Dafür kannst du entweder ein einfaches Array (klasse *objects[100]) oder einen Container wie einen Vektor (std::vector<klasse *> v;) verwenden.
Hier ein kurzes Beispiel für die Verwendung eines Vektors:

Code: Alles auswählen

#include <vector>

int main()
{
  // Vektor anlegen
  std::vector<klasse *> v;
  // 10 Zeiger auf Objekte in den Vektor einfügen
  for( int i = 0; i < 10; i++ )
    v.push_back( new klasse( i ) );
  // Alle Objekte aus dem Vektor entfernen und Speicher freigeben
  while( v.size() > 0 )
    delete v.pop_back();
  return 0;
}

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 10:28 pm
von canlot
Danke.
Kann ich auch als anfänger die Adressen in ein einfaches dynamisches Array speichern??
int *objekte = malloc(10*sizeof(int));
und dann jeweils mit realloc erweitern oder geht das mit Vektoren leichter aber ich kenne mich da leider nicht aus weil ich noch anfänger bin.

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 10:36 pm
von nufan
canlot hat geschrieben:Kann ich auch als anfänger die Adressen in ein einfaches dynamisches Array speichern??
int *objekte = malloc(10*sizeof(int));
und dann jeweils mit realloc erweitern oder geht das mit Vektoren leichter aber ich kenne mich da leider nicht aus weil ich noch anfänger bin.
Natürlich kannst du ^^ Die Verwaltung wird dir mit Vektoren aber leichter fallen.
Mit Arrays würde das so aussehen:

Code: Alles auswählen

klasse **array;
// Array aus 100 Zeigern anlegen
array = new klasse *[100];
// Objekte anlegen und in das Array einfügen
for( int i = 0; i < 100; i++ )
  array[i] = new klasse( i );
// Objekte verwenden
array[index].funktion();
// Speicher für Objekte freigeben
for( int i = 0; i < 100; i++ )
  delete array[i];
// Speicher für Array freigeben
delete[] array;

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Verfasst: Mo Mai 28, 2012 10:57 pm
von canlot
OK Danke ^^