C ++ Zugriffsspezifizierer

C ++ Zugriffsspezifizierer
In C ++ ist eine Klasse eine Reihe von Variablen und Funktionen, die für die Zusammenarbeit konfiguriert wurden. Wenn die Variablen der Klasse angegeben werden, wird ein Objekt erhalten. Ein Objekt hat die gleichen Variablen und Funktionen wie eine Klasse, aber diesmal haben die Variablen Werte. Viele Objekte können aus einer Klasse erstellt werden. Ein Objekt unterscheidet sich von einem anderen Objekt entsprechend dem verschiedenen Wertesatz der Variablen des anderen Objekts. Das Erstellen eines Objekts aus einer Klasse soll das Objekt instanziieren. Auch wenn zwei verschiedene Objekte die gleichen Werte für ihre Variablen haben, sind diese Objekte unterschiedliche Entitäten, die durch verschiedene Namen im Programm identifiziert wurden. Die Variablen für ein Objekt und seine entsprechende Klasse werden als Datenmitglieder bezeichnet. Die Funktionen eines Objekts und seiner entsprechenden Klasse werden als Mitgliedsfunktionen bezeichnet. Datenmitglieder und Mitgliederfunktionen werden als Mitglieder bezeichnet.

Das Wortzugriff bedeutet, den Wert einer Variablen zu lesen oder zu ändern, und es bedeutet auch, eine Funktion zu verwenden. C ++ - Zugriffsspezifizierer sind die Wörter, „privat“, „geschützt“ und „öffentlich“.Sie entscheiden, ob ein Mitglied auf andere Mitglieder seiner Klasse zugreifen kann oder ob eine Funktion oder ein Operator außerhalb der Klasse und nicht zur Klasse zugreifen kann, um ein Mitglied der Klasse zu erhalten. Sie entscheiden auch, ob ein Mitglied einer abgeleiteten (Kinder-) Klasse auf ein Mitglied einer Elternklasse zugreifen kann.

Grundkenntnisse über C ++ sind erforderlich, um diesen Artikel zu verstehen und den bereitgestellten Code zu testen.

Artikelinhalt

  • Die öffentlichen und privaten Spezifizierer
  • Der geschützte Spezifizierer
  • Abgeleitete Klassenspezifizierer und Mitgliedspezifizierer
  • Abschluss

Die öffentlichen und privaten Spezifizierer

Klasse
Jedes Mitglied einer Klasse kann auf ein anderes Mitglied derselben Klasse zugreifen, von denen unabhängig von der als „öffentlich“ oder „privat“ bezeichnet wird.Betrachten Sie das folgende Programm:

#enthalten
Verwenden von Namespace STD;
Klasse Thecla

Privatgelände:
int num1;
int num2;
öffentlich:
Thecla (int n1, int n2)

Num1 = N1; Num2 = N2;

int method ()

Rückgabe Num1;

;
int main ()

Thecla obj (10, 20);
int no2 = obj.Methode();
Cout<// int no1 = obj.Num1;
Rückkehr 0;

Die Ausgabe ist 10. Die privaten Mitglieder sind Num1 und Num2. Die öffentlichen Mitglieder sind Thecla () und Methode (). Beachten Sie, dass Thecla () die Konstruktorfunktion ist, die interessierende Variablen initialisiert. Der Bereich eines Zugriffsspezifizierers beginnt von seinem Etikett bis zum Ende der Klassenbeschreibung (Definition) oder zum Beginn eines anderen Zugriffsspezifiziers.

In der Funktion main () ist die erste Anweisung die Instanziierung, die die Konstruktorfunktion umfasst, die Num1 und Num2 initialisiert. Die nächste Erklärung ruft das öffentliche Mitglied Methode () der Klasse auf.

In der Klassenbeschreibung (Definition) greifen nun die Funktion der öffentlichen Mitglieder, Thecla (), auf die privaten Mitglieder, Num1 und Num2 zu. Auch die öffentliche Mitgliedsfunktion, Methode (), greift auf das private Mitglied, Num1. Jedes Mitglied innerhalb einer Klassenbeschreibung kann auf ein anderes Mitglied innerhalb derselben Klassenbeschreibung zugreifen. Es spielt keine Rolle, welches Mitglied privat oder öffentlich ist.

Eine Funktion oder ein Betreiber, der in der Klassenbeschreibung und außerhalb der Klassenbeschreibung nicht deklariert ist, kann jedoch nur auf öffentliche Mitglieder der Klasse zugreifen. Die Funktion main () beispielsweise ist eine Funktion, die außerhalb der Klassenbeschreibung deklariert ist. Es war in der Lage, nur auf die Methode () und die Thecla () öffentlichen Mitglieder zugreifen zu können. In der Funktion main () ist die Funktion thecla () oBJ (10, 20).

Eine externe Funktion oder einen externen Betreiber, wie z. Entfernen Sie den Kommentarindikator // aus der letzten But-One-Anweisung in Main (). Wenn Sie versuchen, das Programm zu kompilieren, beachten Sie, dass das Programm nicht kompiliert wird, und geben Sie eine Fehlermeldung an.

Standardspezifizierer
Der Standard -Spezifizierer für eine Klasse ist „privat.”So entspricht die obige Klassenbeschreibung der folgenden Beschreibung, privat, jedoch ohne den Spezifizierer:

Klasse Thecla

int num1;
int num2;
öffentlich:
Thecla (int n1, int n2)

Num1 = N1; Num2 = N2;

int method ()

Rückgabe Num1;

;

Notiz: Das Zugriffsspezifizierer -Etikett beginnt mit dem Spezifizierer und folgt dann von einem Dickdarm.

Der geschützte Spezifizierer

Innerhalb einer Klassenbeschreibung und von einer externen Funktion oder einem externen Operator entspricht der geschützte Spezifizierer wie der private Spezifizierer. Ersetzen Sie nun den privaten Spezifizierer im obigen Programm durch den Spezifizierer, schützen und entfernen Sie die Kommentarindikator. Wenn Sie versuchen, das Programm zu kompilieren, beachten Sie, dass das Programm nicht kompiliert wird, und geben Sie eine Fehlermeldung an.

Das Problem des geschützten Spezifizierers erscheint, wenn Mitglieder der abgeleiteten (ererbten) Klasse zugreifen müssen, um Mitglieder der Basisklasse (Eltern).

Öffentlich abgeleitete Klasse mit öffentlichen Mitgliedern
Betrachten Sie das folgende Programm:

#enthalten
Verwenden von Namespace STD;
Klasse Thecla

öffentlich:
int num1 = 10;
geschützt:
int num2 = 20;
Privatgelände:
int num3 = 30;
;
Klasse ChildCla: Öffentliche Thecla

öffentlich:
int methode1 ()

Rückgabe Num1;

int method2 ()

Rückgabe Num2;

/*int method3 ()

Rückgabe Num3;
*/
;
int main ()

Childcla Childobj;
int no1 = mildobj.Methode 1();
Cout<int no2 = mildobj.Methode2 ();
Cout<Rückkehr 0;

Die Ausgabe ist:

10
20

In der Basisklasse ist Num1 öffentlich, Num2 ist geschützt und Num3 ist privat. In der abgeleiteten Klasse sind alle Mitgliederfunktionen öffentlich. Die erste Funktion, Methode1 (), greift auf das öffentliche Datenmitglied zu, Num1. Die zweite Funktion, Methode2 (), greift auf das geschützte Datenelement zu, Num2. Die dritte Funktion Method3 (), obwohl derzeit ausgezeichnet wurde, sollte auf das private Datenmitglied zugreifen, Num3.

Eine abgeleitete Klasse wird nicht ohne Zugangspezifizierer deklariert (öffentlich, geschützt oder privat). Oben wird die abgeleitete Klasse mit dem öffentlichen Spezifizierer deklariert, dh:

Klasse ChildClA: public thecla

Jetzt unbedingt die Definition der dritten Mitgliedsfunktion in der abgeleiteten Klasse. Wenn Sie versuchen, das Programm zu kompilieren, beachten Sie, dass es nicht kompiliert wird, und geben Sie eine Fehlermeldung an.

Notiz: Wenn die gesamte abgeleitete Klasse öffentlich erklärt wird, können seine Mitglieder nicht auf die privaten Mitglieder der Basisklasse zugreifen. Die Mitglieder können jedoch auf die öffentlichen und geschützten Mitglieder der Basisklasse zugreifen. Das obige Programm veranschaulicht dies.

Beachten Sie jedoch, dass ein öffentliches Mitglied der öffentlich abgeleiteten Klasse auf ein geschütztes Mitglied der Basisklasse zugreifen kann.

Abgeleitete Klassenspezifizierer und Mitgliedspezifizierer

Geschützte abgeleitete Klasse mit öffentlichen Mitgliedern
Ersetzen Sie den "öffentlichen" Spezifizierer durch "geschützt" in der obigen Erklärung der abgeleiteten Klasse wie folgt:

Klasse ChildClA: geschützte Thecla

Kompilieren und führen Sie das Programm aus und beachten Sie, dass das Ergebnis das gleiche ist wie zuvor.

Wenn also die gesamte abgeleitete Klasse für geschützt erklärt wird, können ihre Mitglieder nicht auf die privaten Mitglieder der Basisklasse zugreifen. Die Mitglieder können jedoch auf die öffentlichen und geschützten Mitglieder der Basisklasse zugreifen. Dies ist dasselbe wie bei der öffentlichen Erklärung der abgeleiteten Klasse.

Notiz: Ein geschütztes Mitglied der öffentlich abgeleiteten Klasse kann auf ein geschütztes Mitglied der Basisklasse zugreifen.

Private abgeleitete Klasse mit öffentlichen Mitgliedern
Ersetzen Sie den "geschützten" Spezifizierer durch "privat" in der obigen Erklärung der abgeleiteten Klasse wie folgt:

Klasse ChildClA: Private Thecla

Kompilieren und führen Sie das Programm aus und beachten Sie, dass das Ergebnis das gleiche ist wie zuvor.

Wenn also die gesamte abgeleitete Klasse privat erklärt wird, können seine Mitglieder nicht auf die privaten Mitglieder der Basisklasse zugreifen. Die Mitglieder können jedoch auf die öffentlichen und geschützten Mitglieder der Basisklasse zugreifen. Dies ist dasselbe wie bei der abgeleiteten Klasse für geschützt oder öffentlich erklärt wird.

Öffentlich abgeleitete Klasse mit geschützten Mitgliedern
Geben Sie das folgende Programm ein, kompilieren und führen. Einige Codesegmente sind wie folgt:

#enthalten
Verwenden von Namespace STD;
Klasse Thecla

öffentlich:
int num1 = 10;
geschützt:
int num2 = 20;
Privatgelände:
int num3 = 30;
;
Klasse ChildCla: Öffentliche Thecla

geschützt:
int methode1 ()

Rückgabe Num1;

int method2 ()

Rückgabe Num2;

/*int method3 ()

Rückgabe Num3;
*/
;
int main ()

/*Childcla Childobj;
int no1 = mildobj.Methode 1();
Cout</*int no2 = mildobj.Methode2 ();
Cout<Rückkehr 0;

Das Programm funktioniert so wie es ist. Es gibt keine Ausgabe, und es soll keine Ausgabe geben, basierend darauf, wie das Programm eingegeben wurde.

Jetzt, was die Funktionsdefinition, method3 (), in der abgeleiteten Klasse unternimmt. Wenn Sie versuchen, das Programm zu kompilieren, beachten Sie, dass es nicht kompiliert wird, und geben Sie eine Fehlermeldung an. Dies bedeutet, dass auf ein privates Mitglied nicht von einer externen Funktion, einem externen Operator oder einer abgeleiteten Klasse zugegriffen werden kann. Dies ist die gleiche Schlussfolgerung wie oben in Bezug auf den Zugang zu einem privaten Mitglied.

Notiz: Ein geschütztes Mitglied der geschützten abgeleiteten Klasse kann auf ein geschütztes Mitglied der Basisklasse zugreifen.

Geben Sie nun die Kommentare in die abgeleitete Klasse ein und unternimmt das erste Code-Segment in der Funktion main (). Wenn Sie versuchen, das Programm zu kompilieren, beachten Sie, dass das Programm aufgrund des ersten Codesegments in der Funktion main () nicht kompiliert wird. Dieser Effekt ist nicht neu. Abgesehen von der abgeleiteten Klasse, außerhalb der Funktionen und externen Betreibern sind die geschützten und privaten Mitglieder einer (Basis oder abgeleiteten) Klasse den gleichen Spezifizierer, privat, privat. Die main () -Funktion sieht das geschützte Mitglied einer Klasse, ob Basi.

Wenn das zweite Code-Segment der Funktion main () nicht beteiligt ist, gilt dieselbe Erklärung. Das heißt, die main () -Funktion kann nicht auf ein geschütztes oder privates Mitglied der abgeleiteten Klasse oder der Basisklasse zugreifen. Dies ist unabhängig davon, ob ein geschütztes Mitglied der abgeleiteten Klasse auf ein geschütztes Mitglied der Basisklasse zugreifen könnte.

Geschützte abgeleitete Klasse mit geschützten Mitgliedern
Ersetzen Sie den "öffentlichen" Spezifizierer durch "geschützt" in der obigen Erklärung der abgeleiteten Klasse wie folgt:

Klasse ChildClA: geschützte Thecla

Setzen Sie den Kommentar der Codesegmente wieder in die Funktion main () ein, wenn dies noch nicht erledigt wurde. Kompilieren und führen Sie das Programm aus und beachten Sie, dass das Ergebnis wie zuvor ist.

Private abgeleitete Klasse mit geschützten Mitgliedern
Ersetzen Sie den "geschützten" Spezifizierer durch "privat" in der obigen Erklärung der abgeleiteten Klasse wie folgt:

Klasse ChildCla: Privat Thecla

Kompilieren und führen Sie das Programm aus und beachten Sie, dass das Ergebnis wie zuvor sein wird.

Öffentlich abgeleitete Klasse mit privaten Mitgliedern
Ersetzen Sie den „privaten“ Spezifizierer durch „Öffentlichkeit“ in der obigen Erklärung der abgeleiteten Klasse wie folgt:

Klasse ChildClA: public thecla

Machen Sie die Mitglieder der abgeleiteten Klasse privat. Kompilieren und führen Sie das Programm aus. Das Ergebnis unterscheidet sich nicht von dem Fall „öffentlich abgeleitete Klasse mit geschützten Mitgliedern“.

Geschützte abgeleitete Klasse mit privaten Mitgliedern
Ersetzen Sie den "öffentlichen" Spezifizierer durch "geschützt" in der obigen Erklärung der abgeleiteten Klasse wie folgt:

Klasse ChildClA: geschützte Thecla

Kompilieren und führen Sie das Programm aus. Dieses Ergebnis unterscheidet sich nicht von dem Fall „geschützte abgeleitete Klasse mit geschützten Mitgliedern“.

Private abgeleitete Klasse mit privaten Mitgliedern
Ersetzen Sie den "geschützten" Spezifizierer durch "privat" in der obigen Erklärung der abgeleiteten Klasse wie folgt:

Klasse ChildClA: Private Thecla

Kompilieren und führen Sie das Programm aus. Dieses Ergebnis unterscheidet sich nicht von dem Fall „privat abgeleitete Klasse mit geschützten Mitgliedern“.

Abschluss

C ++ - Zugriffsspezifizierer sind die Wörter „privat“, „geschützt“ und „öffentlich“.Sie entscheiden zu Zugang für Mitglieder einer Klasse. Der Bereich eines Zugriffsspezifizierers beginnt von seinem Etikett bis zum Ende der Klassenbeschreibung (Definition) oder bis zum Beginn eines anderen Zugriffsspezifizierers. Jedes Mitglied einer Klasse kann auf ein anderes Mitglied derselben Klasse zugreifen. Ein privates Mitglied einer Klasse kann nicht von externen Funktionen, einem externen Betreiber oder einer abgeleiteten Klasse zugegriffen werden.

Das Mitglied der Basisklasse muss geschützt werden, damit ein privates Mitglied der Basisklasse von einem Mitglied der abgeleiteten Klasse zugegriffen werden kann. Dieses geschützte Mitglied der Basisklasse wird als privates Mitglied der Basisklasse von einer externen Funktion oder einem externen Operator angesehen. Auf ein öffentliches Mitglied einer Klasse kann von jeder externen Funktion, jedem externen Betreiber oder einer abgeleiteten Klasse zugegriffen werden. In Ermangelung eines Zugriffsspezifizierers in einer Klasse wird der private Spezifizierer angenommen. Das heißt, der Standardzugriffsspezifizierer ist privat.