Vererbungsfehler ?



  • Hi

    Ich hab hier ein Problem dass ich einfach nicht verstehe.

    Ich habe ein Basisklasse definiert die ein virtuelle Methode Action definiert.
    Nun leite ich von dieser Klasse ab und überschreibe auch die virtuelle Methode.

    Eine Klasse die auf der Basisklasse arbeitet, ruft die Methode Action auf.
    Tatsächlich arbeitet dies Klasse aber Program mit der Abgeleiteten Klasse.

    Jetz das Problem. Obwohl die abgeleitete Klasse die vituelle Methode überläd wird die Methode der Basisklasse aufgerufen. Das is aber nich Sinn der Sache.

    Vielleicht hilft ein Wenig Code, um euch das zu verdeutlichen:

    class basisklasse
    {
      public:
        basisklasse(param 1,param 2);
        virtual bool Action(void){return true;}
    };
    
    class abgeleitet : public basisklasse
    {
      public:
         abgeleitet(void):basisklasse(wert,wert){}
         bool Action(void);
    };
    
    //container für basisclasse
    //tatsächlich wird sie aber später die abgeleitete Klasse enthalten
    class andereklasse : public vector<basisklasse>
    {
        public:
          andereklasse(){}
    };
    
    //jetz kommt der Teil der die Falsche methode aufruft
    
    void andereklasse::test(void)
    {
      vector<basisklasse>::iterator it;
      for(it=begin();it!=end();it++)
       {
           //irgendwas prüfen
           it->Action();
       }
    }
    

    Warum is das so ?



  • Polymorphie funktioniert nicht mit Basisklasseninstanzen, nur mit Referenzen und Pointern ("slicing"). Da man Referenzen nicht in Vektoren packen kann, müßtest du Pointer nehmen. Oder natürlich Smart Pointer bzw. Handles.



  • HI

    Danke dir. Das war prompt. 🙂

    [ Dieser Beitrag wurde am 24.06.2003 um 13:27 Uhr von prolog editiert. ]


Anmelden zum Antworten