Wie generiert man C ++ Dynamische Objekte?

7

Ich möchte eine Anzahl von Objekten (in C ++) basierend auf dem Betrag / der Anzahl erstellen, die der Benutzer eingibt.

Nun habe ich irgendwo gehört, dass es mit Zeigertricks gemacht werden muss, einen Zeiger auf ein Array des benötigten Objekttyps erzeugt und dann dynamisch die Größe des Arrays (zur Laufzeit) erhöht.

Gibt es keine Problemumgehung für die direkte Verwendung von Namen wie           Objekt1, Objekt2 ..... ObjektX anstatt zu haben           Klassenname * Objekt [] und dann den Array-Index verwenden, um das Objekt zu erhalten?

In jedem Fall wäre es großartig, wenn jemand zu diesem Thema etwas klären könnte.

Danke!

    
suVasH..... 20.06.2009, 15:44
quelle

5 Antworten

6

Bis jetzt hat noch niemand erklärt, warum dein Denken fehlerhaft ist. C ++ ist eine kompilierte Sprache, und es wird viel getan, das Quellprogramm in einen effizienten Maschinencode zu verwandeln. Aus diesem Grund stehen die Namen, die Sie Variablen geben, dem Programm nur zum Zeitpunkt der Kompilierung zur Verfügung, wenn Sie es von der Quelle in eine ausführbare Datei umwandeln. Wenn Sie anschließend Objekte dynamisch erstellen möchten, sind diese Informationen nicht mehr verfügbar. Das Programm kennt nur die Maschinenadressen, in denen sich Operanden zu Maschinenbefehlen befinden.

    
SingleNegationElimination 20.06.2009, 16:15
quelle
8

Wenn Sie ein Array mit dynamischer Größe wünschen, verwenden Sie std :: vector. Sie können die Größe eines integrierten Arrays nicht ändern. Wenn Sie in der Lage sein wollen, ein Objekt anhand eines String-Namens zu erhalten, sollten Sie std :: map verwenden, es hat einen Indexer:

%Vor%     
Dmitry Risenberg 20.06.2009 15:51
quelle
3

Nein, ist es nicht. Darüber hinaus müssen Sie nicht; Verwende std::vector .

    
David Seiler 20.06.2009 15:52
quelle
3

Als ich vor neun Jahren mit dem Programmieren begann, stellte ich mir die gleiche Frage. Die Antwort ist: Sie können nicht.

Sie können zwar ein Array verwenden und es dynamisch skalieren, aber die Verwendung eines stl-Vektors ist viel einfacher (wenn Sie einmal gelernt haben, wie man es benutzt).

    
StackedCrooked 20.06.2009 16:07
quelle
3

Sie können das nicht tun, weil C ++ keine "Umgebung" ( Reflexion ) für Variablen enthält (und Metadaten) können sich befinden. Außerdem werden in C ++ alle Variablennamen bei der Kompilierung des Codes gelöscht Eine Möglichkeit, den gewünschten Effekt zu erzielen, ist die Verwendung einer Karte , in der die Schlüssel Strings sind.

    
Nick Dandoulakis 20.06.2009 16:14
quelle

Tags und Links