problem bei objekterzeugung zur Laufzeit - Zeichenprogramm
-
ok, so weit habe ich das jetzt auch verstanden

(um keinen neuen thread eröffnen zu müssen die letzte kleine frage bezüglich des Zeichenprogramms auch noch schnell hier
)ist es auch möglich den Benutzer zB den Namen eines objekts eingeben zu lassen und das dann zu erzeugen?
ich dachte mir das etwa so:
class Kreis { public: int radius; }; int main() { cout<<"Geben Sie den Namen des zu erzeugenden Objekts ein!\n"; string name; cin>>name; //Kreis mit eingegebenem Namen erzeugen, ka wie^^(z.B. Kreis name =new Kreis?) }Hintergrund ist dass es das programm erheblich vereinfachen müsste da ich die ganzen objektnamen nicht selbst vergeben muss und auch nicht bei jedem Objekterstellen den passenden Namen(zB k1/k2/...) suchen müsste^^
geht das irgendwie?
mfg,
andi01.
-
Das grundlegende Prinzip, dass du suchst sind natürlich Arrays. Allerdings bietet sich da wahrscheinlich ein Standardbibliothek Container eher an.
vector:
http://www.cplusplus.com/reference/stl/vector/oder aber eben, wenn der Name wirklich wichtig ist:
-
ich weiß, ich könnte das schon mit einer art arrays lösen. das problem ist das macht den code recht unübersichtlich(in Klassen sind ja zB auch zugehörige methoden/attribute usw. auf den ersten blick erkennbar, das macht den code besser lesbar^^)
Außerdem würde das doch unglaublich speicher verbrauchen wenn man alle parameter in multidimensionale arrays packt:
//kreis[name][radius][x_mittelpunkt][y_mittelpunkt][füllfarbe]: string kreis [100][100][100][100];wenn man das mit allen nötigen parameter für alle klassen macht braucht das einiges an speicherplatz^^
deshalb wollte ih das ganze eigentlich mit Klassen und Objekten lösen, aber das mit dem Namen eingeben funktioniert da wohl definitiv nicht, oder?
mfg,
andi01.
-
andi01 schrieb:
deshalb wollte ih das ganze eigentlich mit Klassen und Objekten lösen, aber das mit dem Namen eingeben funktioniert da wohl definitiv nicht, oder?
Äh, doch.
Nicht ohne Grund hat dich drakon auf
std::maphingewiesen. Als Ergänzung hilft dir vielleicht dieser Artikel.
-
d.h. wenn das obere Codebeispiel funktionieren soll müsste ich alle Attribute der einzelnen vorherigen Objekte in solchen maps speichern?
Wenn nicht wie soll das denn dann funktionieren?hätte vielleicht mal jemand in kleines codebeispiel(nur so lang wie oben, das erstellen eines objekts mit dem eingegebenen Namen würde ja schon reichen
)?mfg,
andi01.
-
andi01 schrieb:
Außerdem würde das doch unglaublich speicher verbrauchen wenn man alle parameter in multidimensionale arrays packt:
//kreis[name][radius][x_mittelpunkt][y_mittelpunkt][füllfarbe]: string kreis [100][100][100][100];wenn man das mit allen nötigen parameter für alle klassen macht braucht das einiges an speicherplatz^^
?!
Für etwas hast du ja eine Klasse, wo du die Parameter drin speichern kannst..Im übrigen ist das eh nicht das, was du denkst, dass es ist..
Da wird ein Array von Arrays von Arrays von Arrays erstellt. 100^4. Viel Spass.
-
solangsam wird das ganz schön kompliziert^^.
hätte vielleicht mal jemand einen kleinen Codeschnipsel? das erstellen eines objekts mit dem eingegebenen namen würde ja schon reichen^^
eigentlich nräuchte ich nur ein kleines beispiel wie man den namen eines objekts eingeben kann und dieses dann erstellen.
mfg,
andi01.
-
andi01 schrieb:
Wenn nicht wie soll das denn dann funktionieren?hätte vielleicht mal jemand in kleines codebeispiel(nur so lang wie oben, das erstellen eines objekts mit dem eingegebenen Namen würde ja schon reichen
)?Objektorientiert heisst eben, dass du gemeinsame Attribute zu einem Objekt zusammenpackst. Dann brauchst du auch keine vierdimensionalen Arrays.
class Kreis { public: // Konstruktoren etc. private: float radius; Farbe fuellfarbe; // Farbe ist eine andere Klasse von dir Vector2 mittelpunkt; // Vector2 ist eine andere Klasse mit 2 floats };std::map<std::string, Kreis> kreise; // wie du nun Kreise einfügst, findest du in den Links zu std::map. // bitte diese LESEN!
-
ok, dass heißt ich kann die klassen behalten. die eingegebenen objektnamen müsste ich dannin irgendeinen container (zB map) packen. soweit klar.
nur wie man dann aus der map die objekte konstruiert habe ich noch nicht gefunden. ich schaue mir die links nochmal genauer an^^
mfg,
andi01.
-
hm irgendiwe ist mir noch nicht ganz klar wie ich aus der namensliste (zB map) die Objekte erstellen soll. ein kleines Beispiel wäre nicht schlecht

danke,
andi01.
-
In der map sind Objekte drin. Die werden beim einfügen erstellt.
Einfügen kannst du z.B mit der Memberfunktion insert oder gleich mit dem [] Operator:
-
ok, habs kapiert
.danke allen für die hilfe,
andi01.