get variable aus Basisklasse



  • Hi,

    anfangs erstelle ich ein objekt der basisklasse und später ein objekt der abgeleiteten klasse.

    Danach möchte ich gern auf eine public Methode der Basisklasse von der abgeleiteten Klasse aus zugreifen. Befinde ich mich in dieser Methode wird in VS der this-Zeiger nicht als Zeiger der Basisklasse sondern der abgeleiteten Klasse angezeigt.
    Als return-Wert möchte ich gern einen Wert aus der Basisklasse bekommen - leider ohne Erfolg.

    class Basis
    {
    public:
       UINT GetInt(void); 
    
    private: 
       UINT testvar; 
    };
    
    class Abge : public Basis
    {
    
    };
    
    void Abge::Test()
    {
      Abge getVar; 
      UINT test; 
    
      test = getVar.GetInt(); 
    }
    

    Die Variable testvar wurde natürlich zuvor mit einem Wert belegt

    Gruß
    Bernd


  • Mod

    😕 Was ist dein Problem? Ich sehe da gar keines*. Gibt es irgendwelche Fehler? Natürlich kannst du in deiner abgeleiteten Klasse Methoden der Basisklasse benutzen, das ist einer der Hauptaspekte der Vererbung. public-Vererbung beschreibt man in der Regel als eine "ist ein"-Beziehung, zum Beispiel "ein Dackel ist ein Hund". Der Dackel kann alles machen was ein Hund machen kann.

    P.S.: Dein Code sieht mir aber trotzdem komisch aus: Wieso hast du in einer Methode von Abge ein Abge-Objekt? Diese Verwendung ist äußerst ungewöhnlich.

    *: Keines was zu deiner dünnen Problembeschreibung passt. Dein Code enthält schon noch ein paar Fehler und ist so nicht compilierfähig.



  • struct base
    {
      base(int i) : i(i) {}
    
      int get_i() const {return i;}
    private:
      int i;
    };
    
    struct derived : base
    {
      derived(int i) : base(i) {}
    };
    
    #include <cassert>
    
    int main()
    {
      int i=1;
      derived foo(i);
      assert(i == foo.get_i());
    }
    

    funktioniert also nicht?
    Dein Fehler liegt vermutlich wo anders - evtl zeigst du mal etwas mehr Code (zu empfehlen ist immer ein compilierbares Minimalbsp (was den Fehler beinhaltet;)))

    bb

    edit:
    natürlich die member-variable i vergessen... ^^



  • SeppJ schrieb:

    😕 Was ist dein Problem? Ich sehe da gar keines. Gibt es irgendwelche Fehler? Natürlich kannst du in deiner abgeleiteten Klasse Methoden der Basisklasse benutzen, das ist einer der Hauptaspekte der Vererbung. public-Vererbung beschreibt man in der Regel als eine "ist ein"-Beziehung, zum Beispiel "ein Dackel ist ein Hund". Der Dackel kann alles machen was ein Hund machen kann.

    P.S.: Dein Code sieht mir aber trotzdem komisch aus: Wieso hast du in einer Methode von Abge ein Abge-Objekt? Diese Verwendung ist äußerst ungewöhnlich.

    Stimmt, da hab ich mich verschrieben; soll natürlich eine andere Klasse sein, in der ein solches Objekt erzeugt wird der Abge-Klasse.

    Es gibt keine Fehlermeldungen oder ähnliches, der Code wird auch einwandfrei durchlaufen, aber der this-Zeiger ist beim Aufruf der UINT GetInt(void); vom Typ Abge-Klasse und nicht vom Typ Basis (in dieser Funktion).

    Und dadurch ist die Variable zwar vorhanden aber sie besitzt nicht den richtigen Wert (UINT testvar;).

    Bernd



  • compilierbares minimalbsp.?



  • Off-Topic:
    Dackel sind keine Hunde... das sind bestenfalls unausgereifte Hundesimulationen mit jeder Menge Macken und Psychosen.

    On-Topic:
    Du kannst Elemente der Basisklasse durch ihren vollqualifizierten Namen ansprechen, zumindest Methoden. Wahrscheinlich geht´s auch für Datenelemente, aber wenn einen solchen Fall hast liegt mit großer Wahrscheinlichkeit ein Designfehler vor.

    class Base
    {
    public:
       virtual int f()
       {
          return 1;
       }
    };
    
    class Derived : public Base
    {
    public:
       int f()
       {
          if( condition )
          {
             return 2;
          }
          return Base::f();
       }
    };
    


  • dann wird das Problem wahrscheinlich woanders legen. Ich programmiere mit MFC (SDI Applikation) und das Problem existiert bei der CDocument-Class.

    CMyDoc : public CDocument;
    CMy2Doc : public CMyDoc;

    Vielleicht kann man bei einer SDI App nicht zwei Klassen von der CDocument Class ableiten... 😕


Anmelden zum Antworten