C++ Zugriffsspezifizierer
Zugriffsspezifizierer
Mittlerweile sind Sie mit dem Schlüsselwort public
, das in allen unseren Klassenbeispielen vorkommt, recht vertraut:
Beispiel
class MyClass { // Die Klasse
public: // Zugriffsspezifizierer
// Die Kursteilnehmer gehen hierher
};
Try it Yourself »
Das Schlüsselwort public
ist ein Zugriffsspezifizierer. Zugriffsspezifizierer definieren, wie auf die Mitglieder (Attribute und Methoden) einer Klasse zugegriffen werden kann. Im obigen Beispiel sind die Mitglieder public
– was bedeutet, dass sie von außerhalb des Codes aufgerufen und geändert werden können.
Was aber, wenn wir möchten, dass die Mitglieder privat und vor der Außenwelt verborgen bleiben?
In C++ gibt es drei Zugriffsspezifizierer:
public
- Auf die Mitglieder kann von außerhalb der Klasse zugegriffen werdenprivate
- Auf Mitglieder kann von außerhalb der Klasse nicht zugegriffen (oder angezeigt) werdenprotected
- Auf Mitglieder kann nicht von außerhalb der Klasse zugegriffen werden, jedoch kann auf sie in geerbten Klassen zugegriffen werden. Später erfahren Sie mehr über Vererbung.
Im folgenden Beispiel demonstrieren wir die Unterschiede zwischen public
- und private
-Mitgliedern:
Beispiel
class MyClass {
public: // Bezeichner für den öffentlichen Zugriff
int x; // Public Attribut
private: // Privater Zugriffsspezifizierer
int y; // Private Attribut
};
int main() {
MyClass myObj;
myObj.x = 25; // Erlaubt (public)
myObj.y = 50; // Nicht erlaubt (private)
return 0;
}
Wenn Sie versuchen, auf ein privates Mitglied zuzugreifen, tritt ein Fehler auf:
error: y is private
Hinweis: Es ist möglich, über eine öffentliche Methode innerhalb derselben Klasse auf private Mitglieder einer Klasse zuzugreifen. Weitere Informationen hierzu finden Sie im nächsten Kapitel (Kapselung).
Tipp: Es gilt als bewährte Vorgehensweise, Ihre Klassenattribute als privat zu deklarieren (so oft wie möglich). Dadurch wird die Wahrscheinlichkeit verringert, dass Sie selbst (oder andere) den Code vermasseln. Dies ist auch der Hauptbestandteil des Kapselungskonzepts, über das Sie im nächsten Kapitel mehr erfahren werden.
Hinweis: Standardmäßig sind alle Mitglieder einer Klasse privat
, wenn Sie keinen Zugriffsbezeichner angeben:
Beispiel
class MyClass {
int x; // Private Attribut
int y; // Private Attribut
};