Zugriff auf private Elemente
-
Warum darf ich in folgendem Code auf c.r zugreifen, obwohl r als private vereinbart ist?
class Complex { private: int r; public: Complex(const Complex& c) { this->r = c.r; } }:
-
Weil du dich innerhalb deiner eigenen Klasse aufhältst. private gilt nur für Zugriffe aus globalen Funktionen und anderen Klassen.
-
Danke!

Also bedeutet das, dass eine Klasse zu sich selber immer impliziet friend ist?
-
Das bedeutet das du innerhalb einer Klasse auf alle Methoden und Attribute zugreifen kannst, und das private nur vor "zugriffe" von auserhalb der Klasse gilt.
-
Hallo
Du kannst übrigens das "this->" auch weglassen, weil du dich ja innerhalb deiner Klasse befindest. Gibt es ein Beispiel, wo es Sinn machen würde eine Memebrvariable auch für die eigenen Klasse zu sperren?
chrische
-
chrische5 schrieb:
Gibt es ein Beispiel, wo es Sinn machen würde eine Memebrvariable auch für die eigenen Klasse zu sperren?
Keine Ahnung, aber in Eiffel beispielsweise kann man zwischen zwischen "eigene Instanz" und "eigene Klasse, aber fremde Instanz" unterscheiden. Ob das Sinn ergibt, weiß ich nicht. Für mich hat Zugriffskontrolle immer etwas mit Schutz des Interfaces zu tun: private ist alles, was nur innerhalb der Klasse zu sehen ist, d.h. wenn du die Implementierung der privaten Member ändern willst, sind alle Punkte, die du als Folge davon anpassen musst, ebenfalls innerhalb der Klasse (und ihrer -- selbstgewählten -- friends) zu finden. Bei protected oder gar public sieht das schon ganz anders aus.
-
Hallo
Bashar schrieb:
Bei protected oder gar public sieht das schon ganz anders aus.
Ich dachte, dass es keinen Zugriffsunterschied zwischen protected und private gibt, sondern, dass abgeleitet Klassen private Elemente nicht erben, aber alle Elemente die "nur" protected sind. Liege ich da falsch?
chrische
-
chrische5 schrieb:
Ich dachte, dass es keinen Zugriffsunterschied zwischen protected und private gibt, sondern, dass abgeleitet Klassen private Elemente nicht erben, aber alle Elemente die "nur" protected sind. Liege ich da falsch?
Das kommt auf deinen Begriff von "erben" an.
-
chrische5 schrieb:
Ich dachte, dass es keinen Zugriffsunterschied zwischen protected und private gibt, sondern, dass abgeleitet Klassen private Elemente nicht erben, aber alle Elemente die "nur" protected sind. Liege ich da falsch?
Abgeleitete Klassen erben alle Elemente, sie dürfen nur auf private nicht direkt zugreifen (wäre auch schlimm, wenn da plötzlich Member verschwinden würden).