C ++ specyfikatory dostępu

C ++ specyfikatory dostępu
W C ++ klasa to zestaw zmiennych i funkcji, które zostały skonfigurowane do współpracy. Gdy zmienne klasy są podane wartości, obiekt jest uzyskiwany. Obiekt ma takie same zmienne i funkcje jak klasa, ale tym razem zmienne mają wartości. Wiele obiektów można tworzyć z jednej klasy. Jeden obiekt różni się od innego obiektu w zależności od innego zestawu wartości przypisanych do zmiennych drugiego obiektu. Mówi się, że tworzenie obiektu z klasy tworzy instancję obiektu. Nawet jeśli dwa różne obiekty mają te same wartości dla swoich zmiennych, obiekty te są różnymi bytami, zidentyfikowanymi według różnych nazwisk w programie. Zmienne dla obiektu i jego odpowiedniej klasy nazywane są członkami danych. Funkcje obiektu i jego odpowiednia klasa nazywane są funkcjami członkowskimi. Członkowie danych i funkcje członków nazywane są członkami.

Słowo dostęp oznacza odczyt lub zmianę wartości zmiennej, a także oznacza użycie funkcji. Specyfikatory dostępu C ++ to słowa „prywatne”, „chronione” i „publiczne.„Decydują, czy członek może uzyskać dostęp do innych członków swojej klasy, czy też funkcja lub operator poza klasą, a nie należący do klasy może uzyskać dostęp do dowolnego członka klasy. Decydują również, czy członek klasy pochodnej (dziecka) może uzyskać dostęp do członka klasy rodzicielskiej.

Podstawowa znajomość C ++ jest wymagana do zrozumienia tego artykułu i przetestowania dostarczonego kodu.

Treść artykułu

  • Publiczne i prywatne specyfikatory
  • Chroniony specyfikator
  • Oszałowane specyfikatory klasy i specyfikatory członków
  • Wniosek

Publiczne i prywatne specyfikatory

Klasa
Każdy członek klasy może uzyskać dostęp do dowolnego innego członka tej samej klasy, niezależnie od tego, że jest oznaczony jako „publiczny” lub „prywatny.”Rozważ następujący program:

#włączać
za pomocą przestrzeni nazw Std;
klasa thecla

prywatny:
int num1;
int num2;
publiczny:
Thecla (int n1, int n2)

NUM1 = n1; num2 = n2;

metoda int ()

return num1;

;
int main ()

Thecla OBJ (10, 20);
int no2 = obj.metoda();
Cout<// int no1 = obj.NUM1;
powrót 0;

Wyjście to 10. Prywatni członkowie to NUM1 i NUM2. Członkowie publiczni to thecla () i Method (). Należy zauważyć, że thecla () jest funkcją konstruktora, która inicjuje zmienne zainteresowane. Region specyfikatora dostępu zaczyna się od jego etykiety do końca opisu klasy (definicja) lub do początku innego specyfikatora dostępu.

W funkcji Main () pierwszym instrukcją jest instancja obejmująca funkcję konstruktora, która inicjuje NUM1 i NUM2. Następne oświadczenie nazywa członka publicznego, metodą () klasy.

Teraz, w opisie klasy (definicja), funkcja członka publicznego, thecla (), uzyskuje dostęp do prywatnych członków, NUM1 i NUM2. Również funkcja członka publicznego, metoda (), uzyskuje dostęp do członka prywatnego, NUM1. Każdy członek w opisie klasy może uzyskać dostęp do dowolnego innego członka w ramach tego samego opisu klasy; Nie ma znaczenia, który członek jest prywatny lub publiczny.

Jednak funkcja lub operator nie zadeklarowany w opisie klasy i poza opisem klasy może uzyskać dostęp tylko do publicznych członków klasy. Na przykład funkcja main () jest funkcją zadeklarowaną poza opisem klasy. Był w stanie uzyskać dostęp tylko do członków Public Method () i THECLA (). Wewnątrz funkcji main () funkcją thecla () jest obj (10, 20).

Funkcja zewnętrzna lub zewnętrzny operator, taka jak funkcja main (), nie może uzyskać dostępu do żadnego z prywatnych członków klasy, takich jak NUM1 lub NUM2. Usuń wskaźnik komentarza, //, z oświadczenia ostatniego, ale jednego w Main (). Jeśli spróbujesz skompilować program, pamiętaj, że program nie zostanie skompilowany, podając komunikat o błędzie.

Domyślny specyfikator
Domyślny specyfikator dla klasy jest „prywatny.„Tak więc powyższy opis klasy jest taki sam jak następujący opis, prywatny, ale bez specyfikatora:

klasa thecla

int num1;
int num2;
publiczny:
Thecla (int n1, int n2)

NUM1 = n1; num2 = n2;

metoda int ()

return num1;

;

Notatka: Etykieta specyfikatora dostępu zaczyna się od specyfikatora, a następnie następuje okrężnica.

Chroniony specyfikator

W opisie klasy oraz z funkcji zewnętrznej lub zewnętrznego operatora chroniony specyfikator jest taki sam jak prywatny specyfikator. Teraz wymień prywatny specyfikator w powyższym programie na specyfikator, chroń i usuń wskaźnik komentarza, //, z instrukcji ostatniego, ale jednego w funkcji Main (). Jeśli spróbujesz skompilować program, pamiętaj, że program nie zostanie skompilowany, podając komunikat o błędzie.

Kwestia chronionego specyfikatora pojawia się, gdy członkowie klasy pochodnej (odziedziczonej) muszą uzyskać dostęp do członków klasy bazowej (rodzica).

Klasa pochodna publiczna z członkami publicznym
Rozważ następujący program:

#włączać
za pomocą przestrzeni nazw Std;
klasa thecla

publiczny:
int num1 = 10;
chroniony:
int num2 = 20;
prywatny:
int num3 = 30;
;
Klasa Childcla: Public Thecla

publiczny:
int Method1 ()

return num1;

int Method2 ()

return num2;

/*int Method3 ()

return num3;
*/
;
int main ()

Childcla Childobj;
int no1 = childobj.Method1 ();
Cout<int no2 = childobj.Method2 ();
Cout<powrót 0;

Wyjście to:

10
20

W klasie podstawowej NUM1 jest publiczny, NUM2 jest chroniony, a NUM3 jest prywatny. W klasie pochodnej wszystkie funkcje członka są publiczne. Pierwsza funkcja, Method1 (), uzyskuje dostęp do publicznego członka danych, NUM1. Druga funkcja, metoda2 (), uzyskuje dostęp do chronionego elementu danych, NUM2. Trzecia funkcja, Method3 (), choć aktualnie skomentowana, powinna uzyskać dostęp do prywatnego członka danych, NUM3.

Klasa pochodna nie jest zadeklarowana bez specyfikatora dostępu (publiczna, chroniona lub prywatna). Powyżej klasa pochodna jest zadeklarowana z publicznym specyfikatorem, to znaczy:

klasa childcla: public thecla

Teraz nie-komisja Trzecia definicja funkcji członka w klasie pochodnej. Jeśli spróbujesz skompilować program, pamiętaj, że nie zostanie on skompilowany, podając komunikat o błędzie.

Notatka: Gdy cała klasa pochodna jest ogłoszona publicznie, jej członkowie nie mogą uzyskać dostępu do prywatnych członków klasy podstawowej. Jego członkowie mogą jednak uzyskać dostęp do publicznych i chronionych członków klasy podstawowej. Powyższy program to ilustruje.

Należy jednak zauważyć, że członek publicznej klasy pochodnej publicznej może uzyskać dostęp do chronionego członka klasy podstawowej.

Oszałowane specyfikatory klasy i specyfikatory członków

Chroniona klasa pochodna z członkami publicznymi
Zastąp „publiczny” specyfikator „chronionym” w deklaracji powyższej klasy pochodnej, w następujący sposób:

klasa childcla: chroniony thecla

Skompiluj i uruchom program i zauważ, że wynik jest taki sam jak poprzednio.

Tak więc, gdy cała klasa pochodna zostanie uznana za chronioną, jej członkowie nie mogą uzyskać dostępu do prywatnych członków klasy podstawowej. Jego członkowie mogą jednak uzyskać dostęp do publicznych i chronionych członków klasy podstawowej. To jest to samo, co, gdy klasa pochodna jest ogłoszona publicznie.

Notatka: Chroniony członek klasy pochodnej publicznej może uzyskać dostęp do chronionego członka klasy podstawowej.

Prywatna klasa pochodna z członkami publicznymi
Wymień specyfikator „chroniony” na „prywatny” w deklaracji powyższej klasy pochodnej, w następujący sposób:

klasa childcla: private thecla

Skompiluj i uruchom program i zauważ, że wynik jest taki sam jak poprzednio.

Tak więc, gdy cała klasa pochodna jest ogłoszona prywatna, jej członkowie nie mogą uzyskać dostępu do prywatnych członków klasy podstawowej. Jego członkowie mogą jednak uzyskać dostęp do publicznych i chronionych członków klasy podstawowej. Jest to tak samo, jak gdy klasa pochodna jest deklarowana chroniona lub publiczna.

Klasa pochodna publiczna z chronionymi członkami
Wpisz, skompiluj i uruchom następujący program, w którym cała klasa pochodna jest chroniona, a jej członkowie są również chronione. Niektóre segmenty kodu są następujące:

#włączać
za pomocą przestrzeni nazw Std;
klasa thecla

publiczny:
int num1 = 10;
chroniony:
int num2 = 20;
prywatny:
int num3 = 30;
;
Klasa Childcla: Public Thecla

chroniony:
int Method1 ()

return num1;

int Method2 ()

return num2;

/*int Method3 ()

return num3;
*/
;
int main ()

/*Childcla childobj;
int no1 = childobj.Method1 ();
Cout</*int no2 = childobj.Method2 ();
Cout<powrót 0;

Program działa tak, jak jest. Nie ma wyjścia i nie powinno być żadnego wyjścia, w oparciu o sposób wpisywania programu.

Teraz nie-commentacja definicja funkcji, metoda3 (), w klasie pochodnej. Jeśli spróbujesz skompilować program, pamiętaj, że nie zostanie on skompilowany, podając komunikat o błędzie. Oznacza to, że nie można uzyskać dostępu do prywatnego członka z funkcji zewnętrznej, operatora zewnętrznego lub klasy pochodnej. Jest to ten sam wniosek, jaki został przekazany powyżej, dotyczący dostępu do prywatnego członka.

Notatka: Chroniony członek chronionej klasy pochodnej może uzyskać dostęp do chronionego członka klasy podstawowej.

Teraz odłóż komentarze w klasie pochodnej i niekomponują pierwszy segment kodu w funkcji Main (). Jeśli spróbujesz skompilować program, pamiętaj, że program nie skompiluje z powodu pierwszego segmentu kodu w funkcji Main (). Ten efekt nie jest nowy. Oprócz klasy pochodnej, funkcji zewnętrznych i zewnętrznych operatorów, chronieni i prywatni członkowie klasy (podstawowej lub pochodnej) są z tego samego specyfikatora, prywatny. Funkcja Main () widzi chronionego członka dowolnej klasy, zarówno podstawowej, jak i pochodnej, jak ten sam specyfikator, prywatny, i nie może się z nią uzyskiwać.

Jeśli drugi segment kodu funkcji Main (. Oznacza to, że funkcja main () nie będzie w stanie uzyskać dostępu do chronionego lub prywatnego członka klasy pochodnej lub klasy podstawowej. Jest to niezależne od tego, czy chroniony członek klasy pochodnej może uzyskać dostęp do chronionego członka klasy podstawowej.

Chroniona klasa pochodna z chronionymi członkami
Zastąp „publiczny” specyfikator „chronionym” w deklaracji powyższej klasy pochodnej, w następujący sposób:

klasa childcla: chroniony thecla

Połóż komentarz segmentów kodu z powrotem do funkcji Main (), jeśli tego jeszcze nie zostało zrobione. Skompiluj i uruchom program i zauważ, że wynik jest jak wcześniej.

Prywatna klasa pochodna z chronionymi członkami
Wymień specyfikator „chroniony” na „prywatny” w deklaracji powyższej klasy pochodnej, w następujący sposób:

Klasa Childcla: prywatna thecla

Skompiluj i uruchom program i zauważ, że wynik będzie jak poprzednio.

Publiczna klasa pochodna z prywatnymi członkami
Zastąp „prywatnego” specyfikatora „publicznym” w deklaracji powyższej klasy pochodnej, w następujący sposób:

klasa childcla: public thecla

Uczyń członków klasy pochodnej prywatnej. Skompiluj i uruchom program. Wynik nie różni się od sprawy „Klasa pochodna publicznej z chronionymi członkami”.

Chroniona klasa pochodna z prywatnymi członkami
Zastąp „publiczny” specyfikator „chronionym” w deklaracji powyższej klasy pochodnej, w następujący sposób:

klasa childcla: chroniony thecla

Skompiluj i uruchom program. Wynik ten nie różni się od przypadku „Protected Obid Class z chronionymi członkami”.

Prywatna klasa pochodna z prywatnymi członkami
Wymień specyfikator „chroniony” na „prywatny” w deklaracji powyższej klasy pochodnej, w następujący sposób:

klasa childcla: private thecla

Skompiluj i uruchom program. Wynik ten nie różni się od sprawy „prywatnej klasy pochodnej z chronionymi członkami”.

Wniosek

Specyfikatory dostępu C ++ to słowa „prywatne”, „chronione” i „publiczne.„Oferują dostęp do członków klasy. Region specyfikatora dostępu zaczyna się od jego etykiety, do końca opisu klasy (definicja) lub na początku innego specyfikatora dostępu. Każdy członek klasy może uzyskać dostęp do każdego innego członka tej samej klasy. Do prywatnego członka klasy nie można uzyskać żadnej funkcji zewnętrznej, żadnego zewnętrznego operatora lub klasy pochodnej.

Członek klasy podstawowej musi być chroniony, aby członek klasy pochodnej mógł uzyskać prywatnego członka klasy podstawowej. Ten chroniony członek klasy podstawowej jest postrzegany jako prywatny członek klasy podstawowej przez funkcję zewnętrzną lub zewnętrzny operator. Do członka publicznego klasy może uzyskać dostęp do dowolnej funkcji zewnętrznej, dowolnego operatora zewnętrznego lub klasy pochodnej. W przypadku braku dowolnego specyfikatora dostępu w klasie zakłada się prywatny specyfikator. To znaczy domyślny specyfikator dostępu jest prywatny.