Element-Zugriffskontrolle

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Gültigkeitsbereich von Elementen - Index

Member (Elemente) einer Klasse erhalten Zugriffsattribute entweder standardmäßig (abhängig von Klassenschlüsseln und dem Ort der Deklaration) oder durch einen der drei folgenden Zugriff-Spezifizierer: public, private und protected. Bedeutung dieser Attribute:

  • public: Der Member kann von jeder Funktion verwendet werden.
  • private: Der Member kann nur von Member-Funktionen und Friends der Klasse, in der er deklariert wurde, verwendet werden.
  • protected: Es gilt dasselbe wie für private. Zusätzlich ist jedoch die Verwendung durch Member-Funktionen und Friends von Klassen, die von der deklarierten Klasse abgeleitet sind, möglich. Letzteres gilt allerdings nur für Objekte vom abgeleiteten Typ. (Abgeleitete Klassen werden unter "Zugriff auf Basisklassen und abgeleitete Klassen" behandelt.)

Hinweis: Friend-Funktionsdeklarationen werden nicht von Zugriff-Spezifizierern beeinflusst (weitere Informationen finden Sie unter "Friends von Klassen").

Member einer Klasse sind standardmäßig private. Sie müssen daher explizit den Zugriff-Spezifizierer public oder protected verwenden, um die Voreinstellung zu überschreiben.

Member einer Struktur (struct) sind standardmäßig public. Sie können diese Voreinstellung jedoch mit dem Zugriff-Spezifizierer private oder protected überschreiben.

Member einer Variante (union) sind standardmäßig public; diese Einstellung kann nicht geändert werden. Die Angabe eines Zugriff-Spezifizierers ist in Verbindung mit Varianten-Member nicht zulässig.

Ein Zugriff-Spezifizierer bleibt für alle folgenden Member-Deklarationen gültig, bis ein anderer Spezifizierer auftritt. Zum Beispiel:

class X {
   int i;    // X::i is private by default
   char ch;  // so is X::ch
public:
   int j;    // next two are public
   int k;
protected:
   int l;    // X::l is protected
};
struct Y {
   int i;    // Y::i is public by default
private:
   int j;    // Y::j is private
public:
   int k;    // Y::k is public
};
union Z {
   int i;    // public by default; no other choice
   double d;
};

Hinweis: Die Zugriff-Spezifizierer können in jeder beliebigen Reihenfolge aufgeführt und gruppiert werden. Sie können sich die Mühe der Typisierung ersparen, indem Sie alle private-Member gemeinsam deklarieren usw.

Siehe auch