Ist private aber kann trotzdem aufgerufen werden



  • So meine Frage ist, in Zeile 24 und 25 des Codes da ist "Object.Zahl_a" und "Object.Zahl_b", so beide sind private, ich kann sie aber trotzdem fehlerlos aufrufen? Warum? Wie im Code mit Kommentar schon angedeutet hätte ich es eigentlich mit einer "GetZahl_a" und "GetZahl_b" Funktion gemacht, aber es geht auch ohne? Also irgendwie hab ich grad nen Denkfehler, aber mein Buch besagt private Variablen kann man nur innnerhalb der Klasse bzw. mit den jeweiligen Methoden der Klasse aufrufen. Und ich finde das "Object.Zahl_a" und "Object.Zahl_b" klar und deutlich private sind, sie werden zwar in einer Methode einer Klasse aufgerufen aber das ist ja nicht ihre eigene Methode blablabalba.... also irgendwie steh ich auf der Leitung? Bitte um Aufklärung.
    Dankeschön schon mal im Voraus.

    #include <iostream>
    using namespace std;
    
    class math
    {
        public:
        math(int Zahl_a,int Zahl_b);
        math MultYourselfWith(math Object);
        int GetZahl_a() {return Zahl_a;}
        int GetZahl_b() {return Zahl_b;}
        private:
        int Zahl_a;
        int Zahl_b;
    };
    
    math::math(int Zahl_a,int Zahl_b)
    :Zahl_a(Zahl_a),Zahl_b(Zahl_b)
    {
    
    }
    
    math math::MultYourselfWith(math Object)
    {
        int temp_a = Zahl_a * Object.Zahl_a;   //Object.GetZahl_a();     Object.Zahl_a ist doch private?
        int temp_b = Zahl_b * Object.Zahl_b;   //Object.GetZahl_b();     Object.Zahl_b ist doch private?
        math result(temp_a,temp_b);
        return result;
    }
    
    int main()
    {
        math A(5,7);
        math B(8,5);
        math C = A.MultYourselfWith(B);
        cout << C.GetZahl_a() << "\n" << C.GetZahl_b() << "\n";
    
        return 0;
    }
    


  • private bezieht sich auf Klasse und nicht auf Objekte. Klasse != Objekt. Machts jetzt klick? 😉

    math::MultYourselfWith und Objekt.zahl_a sind beide vom Typ math, also ist der Zugriff i.O.



  • Hallo

    In den Funktionen der Klasse kannst du natürlich auch uaf die private bzw, protected Varaiblen zugreifen. Zuwas würde man die denn sonst brauchen?

    chrische



  • Jo, das ist wieder das typische Misverständnis bei "private".
    Ist ein beliebter Anfängerfehler zu glauben dass man aus einer Funktion Foo::Bar nicht auf private Members von _anderen_ Foo Instanzen zugreifen darf. Darf man aber 😉


Anmelden zum Antworten