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!
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.
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% Nein, ist es nicht. Darüber hinaus müssen Sie nicht; Verwende std::vector
.
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).
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.