Zugriff auf Private der Basisklasse



  • Hallo zusammen,
    ich habe folgendes Problem. Mein Hauptprogramm ruft ein Objekt o4 der abgeleiteten Klasse auf(teste(o4.att01() == "zz2as") ; )
    Die Funktion "teste" testet ob das att01 diesen bestimmten string enthält. Die Zugriffsfunktion auf das attribut att01 befindet sich aber in der Basisklasse in private,da es ein vererbtes Attribut auf die Unterklasse ist.

    Ich dachte das diese Zugriffsfunktion in der Basisklasse einfach angesprochen werden kann, bekomme aber den compiler Fehler .....basisklasse is inaccessible. Wenn mir jemand ein Tipp geben könnte wär ich dankbar.

    Gruss



  • ui, wie erkläre ich dir das jetzt nur...

    ich versuch's einfach 😉

    Also, selbst eine Methode der abgeleiteten Klasse kann nicht auf die private-Elemente der Basisklasse zugreifen. Das können nur Methoden, die du zBsp. public-Elemente in der Basisklasse deklariert hast.

    Gruß Kitty



  • Die Zugriffsmethode att01(){return _att01} habe ich in der Basisklasse unter public. Da diese Methode ja auf die Unterklasse vererbt wird müsste doch die Unterklasse auch auf den Funktionsaufruf o4.get() anspringen?? Oder muss ich in der Unterklasse nochmal eine spezielle Methode schreiben die auf die Basisklassenattribute zugreift. Danke für die schnelle Antwort, vielleicht kannst mir noch helfen



  • ich versuch mein bestes 😉

    muss jetzt aber erstmal dich verstehen...

    also wenn du att01() in der Basisklasse unter public hast, müsste es funktionieren. Nur verstehe ich nicht, was du mit diesem 04.get() machst.

    Kannst du nicht ein wenig Code hier reinposten? Würde mir einiges erleichtern und könnte dir evtl. dadurch dann besser helfen...

    Grüßle Kitty



  • OK. Ob das Programm irgendein Sinn macht glaub ich nicht.Wir haben vom Prof die Main-Datei bekommen u sollen zusätzlich die Klassen anlegen.
    Die Basisklasse sieht so aus:

    class basisklasse0022{

    public:
    //Klassenvariable
    static int anzahl;

    //Konstruktor für a1 - Klasse
    basisklasse0022(string a1,int a2);

    //Kopierkonstruktor
    basisklasse0022(const basisklasse0022& o3);

    //Zugriffsfunktionen
    string att01()const {return _att01;}
    int att02()const {return _att02;}

    //Überladene Operatoren
    //== Operator

    bool operator==(const basisklasse0022& a1)const;//für a1
    bool operator==(const string& a2)const; //für a2 String-Parameter

    private:

    string _att01;
    int _att02;

    };

    Die Unterklasse sieht wie folgt aus:

    class a2klasse0022:basisklasse0022{
    public:

    //Klassenvariable
    static int anzahl;

    //Konstruktor mit Parameter
    a2klasse0022(double v21);

    //Überladene Konstruktoren
    // == Konstruktor

    bool operator==(const string& a2)const;

    //Zugriffsfunktionen
    double att21(){return _att21;}

    private:

    double _att21;

    };

    In meinem mein soll jetzt mit dieser Zeile teste(o4.att01() == "zz2as");
    überprüft werden ob von meinem Konstruktor der Wert richtig gesetzt wurde.
    Ich war mir fast sicher das alles so funktionieren müsste. Nur die Fehlermeldung das die Basisklasse inaccessible ist stört jetzt.



  • Du versuchst die Methode von außerhalb der Klasse aus aufzurufen. Dazu müßte die Methode in dieser Klasse public sein. Das ist sie aber nur, wenn Du auch public erbst.

    Innerhalb einer Methode der Klasse könntest Du auch auf die Methode der Basisklasse zugreifen.

    MfG Jester



  • public erben reicht aber nicht. Für Zugriff müsste als access-specifier schon protected erhalten. Private Elemente bleibt für die Klasse schließlich privat.



  • att01 ist eine public-Methode in der Basisklasse



  • Danke für die reichlichen Antworten.Aber alles ausprobierte nützt eigentlich nix.Die Fehlermeldung bleibt bestehen. Wenn ich ein objekt der Unterklasse habe und wie die zugriffsmethode der Basisklasse mit dem objekt aufrufen tritt das problem auf das auf diese methode kein zugriff besteht,obwohl sie public ist.



  • class a2klasse0022:basisklasse0022
    

    wie wärs mir public vererbung?

    class a2klasse0022:public basisklasse0022
    


  • Ich Vollidiot. Hätt ich eigentlich sehen müssen,aber hab ne Ewigkeit alles andere ausprobiert. Vielen Dank für die Hilfe und Geduld.
    Gruss Frank


Anmelden zum Antworten