Auf Variablen in Klasse zugreifen



  • Servus Leute!!!

    ich hätte da mal ne Frage, viel mehr - könnte mir jemand sagen ob ich da richtig liege. Also, ich habe eine Klasse und eine Ableitung. Aus der Ableitung kann ich auf eine Variable (private) aus der Basisklasse nicht zugreifen - da private. Könnte ich dann auch ne Variable bei public deklarieren. Macht man sowas? Eigentlich stehen dort ja nur die Methoden.
    Ist das dann soetwas wie eine globale Variable? Eigentlich ja nicht, weil ich immer den Klassennamen mitangeben muss, aber der Gültigkeitsbereich ist global. Hat also die Vorteile von einer "normalen" globalen Variable nicht die Nachteile.

    Danke



  • sicher kannst du eine Variable in public deklarieren
    du hast dann von außen vollen zugriff auf diese variable

    aber es ist eigentlich besser die variablen zu kapseln
    sprich sie private zu deklarieren und den zugriff über methoden zu regeln
    dann kannst du in den methoden eventuelle fehler abfangen, oder bestimmte eingaben sperren ect....



  • Verschoben nach "C++".



  • Aha, danke!



  • Wenn die die Variable von außen schützen willst und sie dennoch für abgeleitete Klassen verfügbar machen willst, dann benutze "protected" statt "private".



  • hallo,

    also es ist richtig, das die felder (variablen) einer klasse zumeist als private deklariert werden sollten, damit sichergestellt ist, das nur die methoden der klasse diese variable verändern können. im normalen standard c++ würde man nun den weg der getter/setter methoden gehen, der c++ builder stellt uns aber noch eine andere sehr viel elegantere möglichkeit zur verfügung, nämlich variable private deklarierten, und ein property public für den zugriff (readonly, oder writeonly oder read and write).

    class test : public TObject
    {
    private:
       int FMyField;
       ...
    public
       __property int Test = {read = FMyField, write = FMyField};
       ...
    };
    

    über propertys wird auch der zugriff auf Kompos geregelt, nur wenn man in einer kompo möchte das das property im obectinspector erscheint muss es im __published bereich deklariert sein.

    dieses konzept ist absolut object orientiert, und wurde auch in c# und den anderen dotnet sprachen eingesetzt...

    mfg
    murph



  • soweit ich das richtig verstehe willst du in der abgeleiteten klasse auf das Attribut (variable) zugreifen und das geht net mehr.
    wenn das schlüssenwort protected: davor setzt kann deine abgeleitete klasse immer noch auf die variable zugreifen!
    du verletzt trotzdem das prinzip der Kapslung und des Information hiding nicht, da von aussen nicht auf die Variable zugegriffen werden kann !
    Neo Trned hat da voll recht !



  • ulath schrieb:

    du verletzt trotzdem das prinzip der Kapslung und des Information hiding nicht, da von aussen nicht auf die Variable zugegriffen werden kann !

    Man verletzt es vielleicht nicht direkt gegenüber den Endbenutzern der Klassenhierarchie, aber gegenüber allen, die von der Klasse ableiten können/müssen und damit von der internen Repräsentation abhängig werden. Also das gleiche wie bei public data, nur in grün.


Anmelden zum Antworten