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.


Anmelden zum Antworten