Dynamische Instanz



  • Hallo,

    ich möchte in meinem Programm die Instanz Dynamisch bilden.

    Beispiel:

    if(ComboBox1->ItemIndex==0)
          KLASSE2005 st;
    else
          KLASSE2006 st;
    

    Ist so etwas in der Art möglich? Wenn ja wie?

    Ich bin für jede Art von Hilfe dankbar 😃



  • Hallo

    wenn du das mit OOP und Basisklassen machst, ist das möglich.
    Die Klassenstruktur sieht dann so aus :

    class KLASSE
    {
      ...
      };
    
    class KLASSE2005 : public KLASSE
    {
      ...
      };
    
    class KLASSE2006 : public KLASSE
    {
      ...
      };
    
    KLASSE *CurrClass;
    if(ComboBox1->ItemIndex==0)
          CurrClass = new KLASSE2005();
    else
          CurrClass = new KLASSE2006();
    

    Dies ist nur ein grober Überblick. Wenn du das wirklich so machen willst, schau dir ein Tutorial zum Thema OOP an (siehe obere rechte Menüleiste)

    bis bald
    akari



  • Hi,

    so wie in deinem Beispiel würde es zwar gehen, aber die Variable st ist dann nur im if zweig sichtbar oder im else Zweig. Außerhalb des if ... else ... kannst Du nicht darauf zugreifen.

    Willst Du auch außerhalb darauf zugreifen, sollten folgende Bedingungen erfüllt sein:
    - Beide Klassen sollten von der gleichen Basisklasse abgeleitet sein,
    - es muss innerhalb des Gültigkeitsbereiches (zb: unter privat) ein Pointer auf die Basisklasse definiert werden,
    - die Wertzuweisung an den Pointer erfolgt mit new und einem cast auf die abgeleitete Klasse.

    int func()
    {
       BASISCLASS *pSt;
    
       if(ComboBox1->ItemIndex==0)
          pSt = (CHILDCLASS1 *) new CHILDCLASS1;
       else
          pSt = (CHILDCLASS2 *) new CHILDCLASS2;
    
       // weitere action mit pSt
       pSt->ClasFunc();
    }
    

    Nighthero

    wieder zu langsam 😞



  • Das casten kannst getrost weglassen. Bei public-Vererbung spricht man von einer Ist-Ein-Beziehung, womit also

    base *b = new drived;
    

    vollkommen ausreichend ist.




Log in to reply