C ++

Špecifikátory prístupu v C ++

Špecifikátory prístupu v C ++
V C ++ je trieda množina premenných a funkcií, ktoré boli nakonfigurované na spoluprácu. Keď sú premenným triedy dané hodnoty, získa sa objekt. Objekt má rovnaké premenné a funkcie ako trieda, ale tentoraz majú premenné hodnoty. Z jednej triedy je možné vytvoriť veľa objektov. Jeden objekt sa líši od iného objektu podľa rozdielneho súboru hodnôt priradených premenným druhého objektu. Vytvorenie objektu z triedy sa považuje za vytvorenie jeho inštancie. Aj keď majú dva rôzne objekty rovnaké hodnoty pre svoje premenné, sú to rôzne entity, ktoré sú v programe identifikované rôznymi názvami. Premenné pre objekt a jeho zodpovedajúcu triedu sa nazývajú dátové členy. Funkcie objektu a jeho zodpovedajúcej triedy sa nazývajú členské funkcie. Dátové členy a členské funkcie sa nazývajú členovia.

Slovo prístup znamená čítať alebo meniť hodnotu premennej a tiež znamená používať funkciu. Špecifikátory prístupu v C ++ sú slová „súkromný“, „chránený“ a „verejný“.„Rozhodujú, či má člen prístup k ostatným členom svojej triedy, alebo či má funkcia alebo operátor mimo triedy, ktorý nepatrí do triedy, prístup k ľubovoľnému členovi triedy. Tiež rozhodujú o tom, či má člen odvodenej (podradenej) triedy prístup k členom nadradenej triedy.

Na pochopenie tohto článku a na otestovanie poskytnutého kódu sú potrebné základné znalosti jazyka C ++.

Obsah článku

Verejní a súkromní zadávatelia

Trieda
Ktokoľvek z triedy má prístup k akémukoľvek inému členovi tej istej triedy, bez ohľadu na to, ktorý je označený ako „verejný“ alebo „súkromný“.”Zvážte nasledujúci program:

#include
pomocou namespace std;
trieda TheCla

súkromné:
int num1;
int num2;
verejné:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

metóda int ()

návrat num1;

;
int main ()

TheCla obj (10, 20);
int no2 = obj.metóda ();
cout<// int no1 = obj.num1;
návrat 0;

Výstup je 10. Súkromní členovia sú č. 1 a č. 2. Verejní členovia sú TheCla () a method (). Upozorňujeme, že TheCla () je funkcia konštruktora, ktorá inicializuje zaujímavé premenné. Oblasť špecifikátora prístupu začína od jeho označenia po koniec popisu triedy (definície) alebo na začiatok iného špecifikátora prístupu.

Vo funkcii main () je prvým príkazom inštancia zahŕňajúca funkciu konštruktora, ktorá inicializuje čísla 1 a 2. Nasledujúci príkaz zavolá verejného člena, metódu (), triedy.

Teraz v popise (definícii) triedy, verejná členská funkcia, TheCla (), pristupuje k súkromným členom, num1 a num2. Verejná členská funkcia, method (), tiež pristupuje k súkromnému členovi, num1. Ktorýkoľvek člen v opise triedy môže získať prístup k ktorémukoľvek inému členovi v rámci rovnakého popisu triedy; nezáleží na tom, ktorý člen je súkromný alebo verejný.

Avšak funkcia alebo operátor, ktorí nie sú uvedení v popise triedy a mimo popisu triedy, majú prístup iba k verejným členom triedy. Funkcia main () je napríklad funkcia deklarovaná mimo opis triedy. Mala prístup iba k verejným členom metódy () a TheCla (). Vo vnútri funkcie main () je funkcia TheCla () obj (10, 20).

Vonkajšia funkcia alebo vonkajší operátor, ako napríklad funkcia main (), nemá prístup k žiadnemu zo súkromných členov triedy, ako napríklad num1 alebo num2. Odstráňte indikátor komentára // z posledného príkazu v main (). Ak sa pokúsite program skompilovať, nezabudnite, že program sa nezkompiluje, zobrazí sa chybové hlásenie.

Predvolený špecifikátor
Predvolený špecifikátor pre triedu je „súkromný.„Vyššie uvedený popis triedy je teda rovnaký ako nasledujúci popis, súkromný, ale bez špecifikátora:

trieda TheCla

int num1;
int num2;
verejné:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

metóda int ()

návrat num1;

;

Poznámka: štítok špecifikátora prístupu začína špecifikátorom a potom za ním nasleduje dvojbodka.

Chránený špecifikátor

V popise triedy a z vonkajšej funkcie alebo vonkajšieho operátora je chránený špecifikátor rovnaký ako súkromný špecifikátor. Teraz nahraďte súkromný špecifikátor vo vyššie uvedenom programe špecifikátorom, chráňte a odstráňte indikátor komentára // z príkazu last-but-one vo funkcii main (). Ak sa pokúsite program skompilovať, nezabudnite, že program sa nezkompiluje, zobrazí sa chybové hlásenie.

Problém chráneného špecifikátora nastáva, keď členovia odvodenej (zdedenej) triedy musia mať prístup k členom základnej (rodičovskej) triedy.

Verejná odvodená trieda s verejnými členmi
Zvážte nasledujúci program:

#include
pomocou namespace std;
trieda TheCla

verejné:
int num1 = 10;
chránené:
int num2 = 20;
súkromné:
int num3 = 30;
;
trieda ChildCla: verejná TheCla

verejné:
int metóda1 ()

návrat num1;

int metóda2 ()

návrat num2;

/ * int metóda3 ()

návrat num3;
* /
;
int main ()

ChildCla childObj;
int no1 = childObj.metóda1 ();
cout<int no2 = childObj.metóda2 ();
cout<návrat 0;

Výstup je:
10
20

V základnej triede je num1 verejné, num2 chránené a num3 súkromné. V odvodenej triede sú všetky členské funkcie verejné. Prvá funkcia, method1 (), pristupuje k verejnému údajovému členu, num1. Druhá funkcia, method2 (), pristupuje k chránenému údajovému členu num2. Tretia funkcia, method3 (), aj keď je momentálne komentovaná, by mala mať prístup k súkromnému členovi údajov, num3.

Odvodená trieda nie je deklarovaná bez špecifikátora prístupu (verejný, chránený alebo súkromný). Vyššie je odvodená trieda deklarovaná pomocou verejného špecifikátora, to znamená:

trieda ChildCla: verejná TheCla

Teraz odkomentujte definíciu funkcie tretieho člena v odvodenej triede. Ak sa pokúsite zostaviť program, všimnite si, že sa nebude kompilovať, zobrazí sa chybové hlásenie.

Poznámka: Keď je celá odvodená trieda vyhlásená za verejnú, jej členovia nemôžu získať prístup k súkromným členom základnej triedy. Jeho členovia však majú prístup k verejným a chráneným členom základnej triedy. Vyššie uvedený program to ilustruje.

Upozorňujeme však, že verejný člen verejnej odvodenej triedy môže mať prístup k chránenému členovi základnej triedy.

Odvodené špecifikátory triedy a členské špecifikátory

Chránená odvodená trieda s verejnými členmi
Vo vyhlásení odvodenej triedy vyššie nahraďte špecifikátor „public“ výrazom „protected“:

trieda ChildCla: chránená TheCla

Zostavte a spustite program a všimnite si, že výsledok je rovnaký ako predtým.

Keď je teda celá odvodená trieda vyhlásená za chránenú, jej členovia nemôžu získať prístup k súkromným členom základnej triedy. Jeho členovia však majú prístup k verejným a chráneným členom základnej triedy. Je to to isté, ako keď je odvodená trieda vyhlásená za verejnú.

Poznámka: chránený člen verejnej odvodenej triedy má prístup k chránenému členovi základnej triedy.

Trieda odvodená zo súkromia s verejnými členmi
Vo vyhlásení odvodenej triedy vyššie nahraďte špecifikátor „protected“ výrazom „private“:

trieda ChildCla: súkromná TheCla

Zostavte a spustite program a všimnite si, že výsledok je rovnaký ako predtým.

Keď je teda celá odvodená trieda vyhlásená za súkromnú, jej členovia nemôžu získať prístup k súkromným členom základnej triedy. Jeho členovia však majú prístup k verejným a chráneným členom základnej triedy. Je to to isté, ako keď je odvodená trieda vyhlásená za chránenú alebo verejnú.

Verejná odvodená trieda s chránenými členmi
Napíšte, zostavte a spustite nasledujúci program, v ktorom je chránená celá odvodená trieda a chránení sú aj jej členovia. Niektoré segmenty kódu sú:

#include
pomocou namespace std;
trieda TheCla

verejné:
int num1 = 10;
chránené:
int num2 = 20;
súkromné:
int num3 = 30;
;
trieda ChildCla: verejná TheCla

chránené:
int metóda1 ()

návrat num1;

int metóda2 ()

návrat num2;

/ * int metóda3 ()

návrat num3;
* /
;
int main ()

/ * ChildCla childObj;
int no1 = childObj.metóda1 ();
cout</ * int no2 = childObj.metóda2 ();
cout<návrat 0;

Program funguje taký, aký je. Neexistuje žiadny výstup a ani sa o ňom nemá uvažovať, podľa toho, ako bol program napísaný.

Teraz zrušte komentár k definícii funkcie, method3 (), v odvodenej triede. Ak sa pokúsite zostaviť program, všimnite si, že sa nebude kompilovať, zobrazí sa chybové hlásenie. To znamená, že k súkromnému členovi nie je možné získať prístup z vonkajšej funkcie, vonkajšieho operátora alebo odvodenej triedy. Ide o rovnaký záver, aký bol prijatý vyššie, pokiaľ ide o prístup k súkromnému členovi.

Poznámka: chránený člen chránenej odvodenej triedy má prístup k chránenému členovi základnej triedy.

Teraz vložte komentáre späť do odvodenej triedy a odkomentujte prvý segment kódu vo funkcii main (). Ak sa pokúsite zostaviť program, všimnite si, že program nebude zostavený kvôli prvému segmentu kódu vo funkcii main (). Tento efekt nie je nový. Okrem odvodenej triedy, vonkajších funkcií a vonkajších operátorov sú chránení a súkromní členovia (základnej alebo odvodenej) triedy rovnakého špecifikátora, súkromné. Funkcia main () vidí chráneného člena akejkoľvek triedy, či už základnej alebo odvodenej, z rovnakého špecifikátora, súkromného a má zakázaný prístup k nej.

Ak je druhý segment kódu funkcie main () nekomentovaný, použije sa rovnaké vysvetlenie. To znamená, že funkcia main () nebude mať prístup k chránenému alebo súkromnému členovi odvodenej triedy alebo základnej triedy. Toto je nezávislé od toho, či chránený člen odvodenej triedy môže mať prístup k chránenému členovi základnej triedy.

Chránená odvodená trieda s chránenými členmi
Vo vyhlásení odvodenej triedy vyššie nahraďte špecifikátor „public“ výrazom „protected“:

trieda ChildCla: chránená TheCla

Ak to ešte nebolo urobené, vložte komentár segmentov kódu späť do funkcie main (). Zostavte a spustite program a všimnite si, že výsledok je ako predtým.

Trieda odvodená zo súkromia s chránenými členmi
Vo vyhlásení odvodenej triedy vyššie nahraďte špecifikátor „protected“ výrazom „private“:

trieda ChildCla: súkromná TheCla

Zostavte a spustite program a všimnite si, že výsledok bude ako predtým.

Verejná odvodená trieda so súkromnými členmi
Vo vyhlásení odvodenej triedy vyššie nahraďte špecifikátor „private“ výrazom „public“:

trieda ChildCla: verejná TheCla

Nastaviť členov odvodenej triedy ako súkromných. Zostavte a spustite program. Výsledok sa nelíši od prípadu „Verejná odvodená trieda s chránenými členmi“.

Chránená odvodená trieda so súkromnými členmi
Vo vyhlásení odvodenej triedy vyššie nahraďte špecifikátor „public“ výrazom „protected“:

trieda ChildCla: chránená TheCla

Zostavte a spustite program. Tento výsledok sa nelíši od prípadu „Chránená odvodená trieda s chránenými členmi“.

Trieda odvodená zo súkromia so súkromnými členmi
Vo vyhlásení odvodenej triedy vyššie nahraďte špecifikátor „protected“ výrazom „private“:

trieda ChildCla: súkromná TheCla

Zostavte a spustite program. Tento výsledok sa nelíši od prípadu „Súkromná odvodená trieda s chránenými členmi“.

Záver

Špecifikátory prístupu v C ++ sú slová „súkromné“, „chránené“ a „verejné.„Rozhodujú o prístupe pre členov triedy. Oblasť špecifikátora prístupu začína od jeho štítka, na koniec popisu triedy (definície) alebo na začiatok iného špecifikátora prístupu. Ktokoľvek z triedy má prístup k ktorémukoľvek ďalšiemu členovi z tej istej triedy. K súkromnému členovi triedy nemôže získať prístup žiadna vonkajšia funkcia, žiadny vonkajší operátor ani odvodená trieda.

Člen základnej triedy musí byť chránený, aby k súkromnému členovi základnej triedy mohol získať prístup člen odvodenej triedy. Tento chránený člen základnej triedy je vonkajšou funkciou alebo vonkajším operátorom považovaný za súkromného člena základnej triedy.

K verejnému členovi triedy môže mať prístup akákoľvek vonkajšia funkcia, akýkoľvek vonkajší operátor alebo odvodená trieda.

Ak v triede neexistuje žiadny špecifikátor prístupu, predpokladá sa súkromný špecifikátor. To znamená, že predvolený špecifikátor prístupu je súkromný.

Odkazy použité v tejto práci

  • Alireza Ebrahimi, DEDIČSTVO: OPAKOVATEĽNOSŤ A ROZŠÍRITEĽNOSŤ
  • S. Malik, Dátové štruktúry pomocou C ++, 2. vydanie
Hry Výukový program Battle for Wesnoth
Výukový program Battle for Wesnoth
Battle for Wesnoth je jednou z najpopulárnejších open source strategických hier, ktoré si v súčasnosti môžete zahrať. Táto hra bola nielen vyvinutá ve...
Hry 0 A.D. Výukový program
0 A.D. Výukový program
Z mnohých strategických hier je tu 0 A.D. dokáže vyniknúť ako komplexný titul a veľmi hlboká, taktická hra napriek tomu, že je otvoreným zdrojom. Vývo...
Hry Výukový program pre Unity3D
Výukový program pre Unity3D
Úvod do Unity 3D Unity 3D je výkonný nástroj na vývoj hier. Je to multiplatforma, ktorá vám umožňuje vytvárať hry pre mobilné telefóny, web, počítače ...