Dynamisch im laufe eines Programms ein Objekt erstellen.

Schnelle objektorientierte, kompilierende Programmiersprache.
canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von canlot » Mo Mai 28, 2012 7:41 pm

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???
Unwissenheit ist ein Segen

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3073
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von cloidnerux » Mo Mai 28, 2012 7:54 pm

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"
Redundanz macht wiederholen unnötig.
quod erat expectandum

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von canlot » Mo Mai 28, 2012 8:16 pm

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();
}
Unwissenheit ist ein Segen

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3073
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von cloidnerux » Mo Mai 28, 2012 9:34 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von canlot » Mo Mai 28, 2012 9:42 pm

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?? ;)
Unwissenheit ist ein Segen

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3073
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von cloidnerux » Mo Mai 28, 2012 9:45 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

nufan
Wiki-Moderator
Beiträge: 2436
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von nufan » Mo Mai 28, 2012 10:10 pm

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;
}

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von canlot » Mo Mai 28, 2012 10:28 pm

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.
Unwissenheit ist ein Segen

nufan
Wiki-Moderator
Beiträge: 2436
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von nufan » Mo Mai 28, 2012 10:36 pm

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;

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Dynamisch im laufe eines Programms ein Objekt erstellen.

Beitrag von canlot » Mo Mai 28, 2012 10:57 pm

OK Danke ^^
Unwissenheit ist ein Segen

Antworten