dynamisches Objekt in switch-case Anweisung erstellen
-
Hallo,
Ich lerne gerade C++ Grundlagen und habe folgendes Problem:Ich habe eine Klasse "wurzel" und 3 direkt vererbte Klassen "Teil1", "Teil2" & "Teil3". Jetzt will ich, je nach Eingabe, ein Objekt von einer dieser Teil-Klassen erzeugen. Das erzeugte Objekt braucht einen einheitlichn Zeiger, damit ich mit diesem im Programmverlauf weiterarbeiten kann(die get/set Metohden der erzeugten Objekte sind unabhängig von der Klasse gleich, da sie alle direkt von "Wurzel" erben). Hier der Quelltext:
unsigned int wahl; cout << "Was für ein Teil soll erstellt werden?" << endl << "(1) Teil1" << endl << "(2) Teil2" << endl << "(3) Teil3" << endl << "Eingabe: "; cin >> wahl; switch(wahl){ case 1: v1* ptr = new Teil1; break; case 2: Teil2* ptr = new Teil2; break; case 3: Teil3* ptr = new Teil3; break; //nach diesem Programmteil soll mit (*ptr) weitergearbeitet werden }Ist das irgendwie so lösbar oder ist der Ansatz falsch?
Gruß
NIklas
-
Das Stichwort ist Polymorphie.
Basisklasse *ptr; ptr = new AbgeleiteteKlasseEins; ptr = new AbgeleiteteKlasseZwei; ptr = new AbgeleiteteKlasseDrei;
-
yeah...wahnsinn. Wieder soviel Leerzeit wegen ein paar so popeligen Zeilen verbracht :). Vielen Dank!
-
Anzumerken ist, dass du dann eben nur noch auf die Variablen und Methoden der Basisklasse zugreifen kannst. Das sollte bei einem vernünftigen Klassendesign aber kein Problem sein.
-
Sonst auch daran denken das wenn du neue Variablen in einem case anlegst dies in einem Block zu tun, da du sonst mit einigen Compilern Probleme bekommst.
Also:
switch x{ case 0: { // <-- wichtig int y = 3; // was auch immer } // <-- wichtig break; case 1: // .... };
-
Fellhuhn schrieb:
Sonst auch daran denken das wenn du neue Variablen in einem case anlegst dies in einem Block zu tun, da du sonst mit einigen Compilern Probleme bekommst.
Also:
switch x{ case 0: { // <-- wichtig int y = 3; // was auch immer } // <-- wichtig break; case 1: // .... };Und nicht vergessen die Variable _vor_ dem Switch Block zu initialisieren.
Denn sonst kannst du damit ja nicht weiter arbeiten. Und auf ungültige Werte prüfen (default-Block im Switch).
-
Janjan schrieb:
Fellhuhn schrieb:
Sonst auch daran denken das wenn du neue Variablen in einem case anlegst dies in einem Block zu tun, da du sonst mit einigen Compilern Probleme bekommst.
Also:
switch x{ case 0: { // <-- wichtig int y = 3; // was auch immer } // <-- wichtig break; case 1: // .... };Und nicht vergessen die Variable _vor_ dem Switch Block zu initialisieren.
Denn sonst kannst du damit ja nicht weiter arbeiten. Und auf ungültige Werte prüfen (default-Block im Switch).Nein. Mein Beispiel ist für Fälle in denen (hier) y nicht mehr anderswo als in dem einen case benötigt wird.