Zugriff auf private Element aus 2ter Klasse



  • class data
    {
    private:
           int value;   // So kann ich aus PrintValue nicht auf diese Variable zugreifen
    };
    
    class calc : private data;
    {
    public:
          void PrintValue();
    
    };
    void calc::PrintValue()
    {
        cout<< value << endl;
    }
    

    Wenn ich aber schreibe:

    class data
    {
    protected:
           int value;
    };
    

    Dann ist der Zugriff ja kein Problem mehr, aber angenommen ich habe ganz viele Klassen dann weiss ich ja gar nicht aus welcher Klasse die Variable value jetzt ist.

    Daher dachte ich könnte folgendes machen:

    void calc::PrintValue()
    {
    data d;
    
        cout<< d.value << endl; // Jetzt sehe ich zu welcher Klasse value gehört
    }
    

    Aber das mag der Compiler nicht, da sagt er das der Zugirff auf value nicht möglich wäre.

    Wie macht man es richtig?



  • NoobDerKlassen schrieb:

    Dann ist der Zugriff ja kein Problem mehr

    für Klassen, die von daata beliten nicht. Für alle anderen schon, wie du siehst.

    Wie macht man es richtig?

    Kommt drauf an. Getter zur Verfügung stellen oder public benutzen. Schau dir nochmal den Abschnitt zu Zugriffsspezifizierern im Buch deiner Wahl an 😉



  • NoobDerKlassen schrieb:

    [...]

    Dann ist der Zugriff ja kein Problem mehr, aber angenommen ich habe ganz viele Klassen dann weiss ich ja gar nicht aus welcher Klasse die Variable value jetzt ist.

    Mach mal ein kleines Beispiel mit drei oder vier (statt ganz vielen) Klassen, aus dem hervorgeht, wo genau Du ein Problem siehst.



  • NoobDerKlassen schrieb:

    Daher dachte ich könnte folgendes machen:

    void calc::PrintValue()
    {
    data d;
    
        cout << d.value << endl; // Jetzt sehe ich zu welcher Klasse value gehört
    }
    

    Na du könntest auch einfach

    void calc::PrintValue()
    {
        int ehWurschtValue = 42;
        cout << ehWurschtValue << endl;
    }
    

    schreiben. Das würde dann wenigstens compilieren. Sinnvoll wäre es immer noch nicht, aber da du ja auch in deinem Beispiel nicht auf das "value" deines Objekts zugreifen willst, sondern einfach auf ein "value" eines beliebig konstruierten neuen Objekts...

    Oder du könntest es gleich richtig machen und data::value schreiben.

    void calc::PrintValue()
    {
        cout << data::value << endl; // Juchui
    }
    


  • Damit konnte ich mein Problem lösen, Danke:

    cout << data::value << endl; // Juchui
    

    Juchui 🙂


Anmelden zum Antworten