Problem mit Vererbungsprinzip



  • Ich habe folgendes Problem und hoffe jemand kann mir helfen:

    class A{
    private:
    bool x;
    }
    
    class B : public A{
    public:
    void foo(){
    if(x) ...
    }
    };
    

    wieso gibt es fuer obiges einen fehler !?!?!? (Fehler lautet, dass x ein private-element ist auf welches ich keinen zugriff habe, wenn ich foo() für ein B-Objekt aufrufen will)

    irgendwie komme ich an die private-member-variable x der klasse a nicht ran.
    Wie schaffe ich das!?

    Danke.



  • bool getX();
    

    Oder mit protected der Abgeleiteten Klasse den Zugriff erlauben:

    protected:
    
        bool x;
    


  • eine private-membervariable der Klasse A kann nur von Membern der Klasse A benutzt werden. Da deine variable x private ist, ist ihr 'Sichtbarkeitsbereich' auf die Klasse A begrenzt. Das ist durchaus absicht in C++. Wenn eine abgleitete Klasse B die Variable Klasse A::x 'sehen' und benutzen können soll, so musst du sie mit 'protected' deklarieren.
    hoffe das erklärt dir das problem.
    tschau
    arni



  • Wobei Du man Membersvariablen niemals protected machen sollte. Man verletzt damit das Kapseöungsprinzip genauso, wie wenn man sie public macht.
    Ist die Variable public kann ich jegliche illegale Manipulation vornehmen. Wenn sie protected ist und ich will sie modifizieren muß ich halt vorher von der Klasse erben. Besser ist es hier weitere protected Memberfunktionen zur Verfügung zu stellen, sodaß die Klasse als Basis eine breitere Funktionalität bietet, als für den Normalanwender. So bleibt in der Basis weiterhin alles Konsistent gehalten werden.

    MfG Jester


Anmelden zum Antworten