C++- Zugriffsbezeichner


Greifen Sie auf Spezifizierer zu

Inzwischen sind Sie mit dem publicSchlüsselwort, das in allen unseren Klassenbeispielen vorkommt, ziemlich vertraut:

Beispiel

class MyClass {  // The class
  public:        // Access specifier
    // class members goes here
};

Das publicSchlüsselwort ist ein Zugriffsbezeichner. Zugriffsbezeichner 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 ist jedoch, wenn wir möchten, dass Mitglieder privat und vor der Außenwelt verborgen sind?

In C++ gibt es drei Zugriffsbezeichner:

  • public - Mitglieder sind von außerhalb der Klasse zugänglich
  • private - Mitglieder können von außerhalb der Klasse nicht aufgerufen (oder angezeigt) werden
  • protected- Mitglieder können nicht von außerhalb der Klasse aufgerufen werden, jedoch kann auf sie in geerbten Klassen zugegriffen werden. Sie werden später mehr über Vererbung erfahren .

Im folgenden Beispiel demonstrieren wir die Unterschiede zwischen publicund private-Elementen:

Beispiel

class MyClass {
  public:    // Public access specifier
    int x;   // Public attribute
  private:   // Private access specifier
    int y;   // Private attribute
};

int main() {
  MyClass myObj;
  myObj.x = 25;  // Allowed (public)
  myObj.y = 50;  // Not allowed (private)
  return 0;
}

Wenn Sie versuchen, auf ein privates Mitglied zuzugreifen, tritt ein Fehler auf:

error: y is private

Hinweis: Es ist möglich, auf private Mitglieder einer Klasse zuzugreifen, indem eine öffentliche Methode innerhalb derselben Klasse verwendet wird. Siehe das nächste Kapitel ( Einkapselung ) um dies zu tun.

Tipp: Es gilt als bewährte Methode, Ihre Klassenattribute als privat zu deklarieren (so oft wie möglich). Dadurch wird die Wahrscheinlichkeit verringert, dass Sie (oder andere) den Code durcheinanderbringen. Dies ist auch der Hauptbestandteil des Encapsulation - Konzepts, über das Sie im nächsten Kapitel mehr erfahren werden.

Hinweis: Standardmäßig sind alle Mitglieder einer Klasse, privatewenn Sie keinen Zugriffsbezeichner angeben:

Beispiel

class MyClass {
  int x;   // Private attribute
  int y;   // Private attribute
};