C ++

Specifikátory přístupu v C ++

Specifikátory přístupu v C ++
V C ++ je třída sada proměnných a funkcí, které byly nakonfigurovány pro spolupráci. Když jsou proměnným třídy dány hodnoty, získá se objekt. Objekt má stejné proměnné a funkce jako třída, ale tentokrát mají proměnné hodnoty. Z jedné třídy lze vytvořit mnoho objektů. Jeden objekt se liší od jiného objektu podle odlišné sady hodnot přiřazených proměnným druhého objektu. Vytváření objektu z třídy se říká, že vytváří instanci objektu. I když dva různé objekty mají pro své proměnné stejné hodnoty, jsou to různé entity, které jsou v programu identifikovány různými názvy. Proměnné pro objekt a jeho odpovídající třídu se nazývají datové členy. Funkce objektu a jeho odpovídající třídy se nazývají členské funkce. Datové členy a členské funkce se nazývají členové.

Slovo přístup znamená načíst nebo změnit hodnotu proměnné a také znamená použít funkci. Specifikátory přístupu v C ++ jsou slova „soukromý“, „chráněný“ a „veřejný“.„Rozhodují, zda má člen přístup k ostatním členům své třídy, nebo zda funkce nebo operátor mimo třídu, který nepatří do třídy, může přistupovat k jakémukoli členovi třídy. Rovněž se rozhodnou, zda má člen odvozené (podřízené) třídy přístup k členovi nadřazené třídy.

Pro pochopení tohoto článku a pro otestování poskytnutého kódu jsou nutné základní znalosti jazyka C ++.

Obsah článku

Veřejní a soukromí zadavatelé

Třída
Kterýkoli člen třídy má přístup k jakémukoli jinému členovi stejné třídy, nezávisle na tom, který je označen jako „veřejný“ nebo „soukromý“.„Zvažte následující program:

#zahrnout
pomocí jmenného prostoru std;
třída TheCla

soukromé:
int num1;
int num2;
veřejnost:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

metoda int ()

návrat num1;

;
int main ()

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

Výstup je 10. Soukromí členové jsou num1 a num2. Veřejnými členy jsou TheCla () a method (). Všimněte si, že TheCla () je funkce konstruktoru, která inicializuje požadované proměnné. Oblast specifikátoru přístupu začíná od jeho popisku na konec popisu třídy (definice) nebo na začátek jiného specifikátoru přístupu.

Ve funkci main () je prvním příkazem instance zahrnující funkci konstruktoru, která inicializuje num1 a num2. Další příkaz volá veřejného člena, metodu () třídy.

Nyní v popisu třídy (definice) veřejná členská funkce TheCla () přistupuje k soukromým členům, num1 a num2. Také veřejná členská funkce, method (), přistupuje k soukromému členu, num1. Kterýkoli člen v popisu třídy má přístup k jakémukoli jinému členovi v rámci stejného popisu třídy; nezáleží na tom, který člen je soukromý nebo veřejný.

Funkce nebo operátor, který není deklarován v popisu třídy a mimo popis třídy, však může přistupovat pouze k veřejným členům třídy. Funkce main () je například funkce deklarovaná mimo popis třídy. Bylo možné získat přístup pouze k veřejným členům metody () a TheCla (). Uvnitř funkce main () je funkce TheCla () obj (10, 20).

Venkovní funkce nebo vnější operátor, jako je funkce main (), nemá přístup k žádnému ze soukromých členů třídy, například num1 nebo num2. Odebrat indikátor komentáře // z příkazu last-but-one v main (). Pokud se pokusíte program zkompilovat, nezapomeňte, že program nebude zkompilován a zobrazí chybovou zprávu.

Výchozí specifikátor
Výchozí specifikátor třídy je „soukromý.„Výše uvedený popis třídy je tedy stejný jako následující popis, soukromý, ale bez specifikátoru:

třída TheCla

int num1;
int num2;
veřejnost:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

metoda int ()

návrat num1;

;

Poznámka: štítek specifikátoru přístupu začíná specifikátorem a za ním následuje dvojtečka.

Chráněný specifikátor

V rámci popisu třídy a z vnější funkce nebo vnějšího operátoru je chráněný specifikátor stejný jako soukromý specifikátor. Nyní nahraďte soukromý specifikátor ve výše uvedeném programu specifikátorem, chráňte a odeberte indikátor komentáře // z příkazu last-but-one ve funkci main (). Pokud se pokusíte program zkompilovat, nezapomeňte, že program nebude zkompilován a zobrazí chybovou zprávu.

Problém chráněného specifikátoru nastává, když členové odvozené (zděděné) třídy musí mít přístup k členům základní (nadřazené) třídy.

Veřejná odvozená třída s veřejnými členy
Zvažte následující program:

#zahrnout
pomocí jmenného prostoru std;
třída TheCla

veřejnost:
int num1 = 10;
chráněný:
int num2 = 20;
soukromé:
int num3 = 30;
;
třída ChildCla: veřejná TheCla

veřejnost:
int metoda1 ()

návrat num1;

int metoda2 ()

návrat num2;

/ * int metoda3 ()

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

ChildCla childObj;
int no1 = childObj.metoda1 ();
cout<int no2 = childObj.metoda2 ();
cout<návrat 0;

Výstupem je:
10
20

V základní třídě je num1 veřejné, num2 chráněné a num3 soukromé. V odvozené třídě jsou všechny členské funkce veřejné. První funkce, method1 (), přistupuje k veřejnému datovému členu num1. Druhá funkce, method2 (), přistupuje k chráněnému datovému členu num2. Třetí funkce, method3 (), i když je aktuálně komentována, by měla přistupovat k soukromému datovému členu num3.

Odvozená třída není deklarována bez specifikátoru přístupu (veřejná, chráněná nebo soukromá). Nahoře je odvozená třída deklarována s veřejným specifikátorem, tj .:

třída ChildCla: veřejná TheCla

Nyní zrušte komentář definice třetí členské funkce v odvozené třídě. Pokud se pokusíte program zkompilovat, nezapomeňte, že se nebude kompilovat a zobrazí chybovou zprávu.

Poznámka: Když je celá odvozená třída deklarována jako veřejná, její členové nemají přístup k soukromým členům základní třídy. Její členové však mají přístup k veřejným a chráněným členům základní třídy. Výše uvedený program to ilustruje.

Všimněte si však, že veřejný člen veřejné odvozené třídy může přistupovat k chráněnému členovi základní třídy.

Odvozené specifikátory tříd a členské specifikátory

Chráněná odvozená třída s veřejnými členy
Ve výše uvedené deklaraci odvozené třídy nahraďte specifikátor „public“ výrazem „protected“:

třída ChildCla: chráněná TheCla

Zkompilujte a spusťte program a všimněte si, že výsledek je stejný jako dříve.

Když je tedy celá odvozená třída prohlášena za chráněnou, její členové nemají přístup k soukromým členům základní třídy. Její členové však mohou přistupovat k veřejným a chráněným členům základní třídy. To je stejné, jako když je odvozená třída deklarována jako veřejná.

Poznámka: chráněný člen veřejné odvozené třídy může přistupovat k chráněnému členovi základní třídy.

Soukromá odvozená třída s veřejnými členy
V deklaraci výše odvozené třídy nahraďte specifikátor „protected“ za „private“:

třída ChildCla: soukromá TheCla

Zkompilujte a spusťte program a všimněte si, že výsledek je stejný jako dříve.

Když je tedy celá odvozená třída prohlášena za soukromou, její členové nemají přístup k soukromým členům základní třídy. Její členové však mohou přistupovat k veřejným a chráněným členům základní třídy. To je stejné, jako když je odvozená třída deklarována jako chráněná nebo veřejná.

Veřejná odvozená třída s chráněnými členy
Zadejte, zkompilujte a spusťte následující program, ve kterém je chráněna celá odvozená třída a její členové jsou také chráněni. Některé segmenty kódu jsou následující:

#zahrnout
pomocí jmenného prostoru std;
třída TheCla

veřejnost:
int num1 = 10;
chráněný:
int num2 = 20;
soukromé:
int num3 = 30;
;
třída ChildCla: veřejná TheCla

chráněný:
int metoda1 ()

návrat num1;

int metoda2 ()

návrat num2;

/ * int metoda3 ()

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

/ * ChildCla childObj;
int no1 = childObj.metoda1 ();
cout</ * int no2 = childObj.metoda2 ();
cout<návrat 0;

Program funguje tak, jak je. Neexistuje žádný výstup a předpokládá se, že nebude žádný výstup, podle toho, jak byl program zadán.

Nyní zrušte komentář definice funkce, method3 (), v odvozené třídě. Pokud se pokusíte program zkompilovat, nezapomeňte, že se nebude kompilovat a zobrazí chybovou zprávu. To znamená, že k soukromému členovi nelze získat přístup z vnější funkce, vnějšího operátoru nebo odvozené třídy. Jedná se o stejný závěr, jaký byl učiněn výše, pokud jde o přístup k soukromému členovi.

Poznámka: chráněný člen chráněné odvozené třídy má přístup k chráněnému členovi základní třídy.

Nyní vložte komentáře zpět do odvozené třídy a zrušte komentář prvního segmentu kódu ve funkci main (). Pokud se pokusíte program zkompilovat, nezapomeňte, že program nebude zkompilován kvůli prvnímu segmentu kódu ve funkci main (). Tento efekt není nový. Kromě odvozené třídy, vnějších funkcí a vnějších operátorů jsou chránění a soukromí členové (základní nebo odvozené) třídy stejného specifikátoru, soukromé. Funkce main () vidí chráněného člena jakékoli třídy, ať už základní nebo odvozené, ze stejného specifikátoru, soukromé a má zakázán přístup k ní.

Pokud je druhý segment kódu funkce main () bez komentáře, použije se stejné vysvětlení. To znamená, že funkce main () nebude mít přístup k chráněnému nebo soukromému členu odvozené třídy nebo základní třídy. To je nezávislé na tom, zda chráněný člen odvozené třídy mohl přistupovat k chráněnému členu základní třídy.

Chráněná odvozená třída s chráněnými členy
Ve výše uvedené deklaraci odvozené třídy nahraďte specifikátor „public“ výrazem „protected“:

třída ChildCla: chráněná TheCla

Pokud to ještě nebylo provedeno, vložte komentář segmentů kódu zpět do funkce main (). Zkompilujte a spusťte program a všimněte si, že výsledek je jako předtím.

Soukromá odvozená třída s chráněnými členy
V deklaraci výše odvozené třídy nahraďte specifikátor „protected“ za „private“:

třída ChildCla: soukromá TheCla

Zkompilujte a spusťte program a všimněte si, že výsledek bude jako dříve.

Veřejná odvozená třída se soukromými členy
V deklaraci výše odvozené třídy nahraďte specifikátor „private“ za „public“:

třída ChildCla: veřejná TheCla

Udělejte členy odvozené třídy soukromými. Zkompilujte a spusťte program. Výsledek se neliší od případu „Veřejná odvozená třída s chráněnými členy“.

Chráněná odvozená třída se soukromými členy
Ve výše uvedené deklaraci odvozené třídy nahraďte specifikátor „public“ výrazem „protected“:

třída ChildCla: chráněná TheCla

Zkompilujte a spusťte program. Tento výsledek se nijak neliší od případu „Chráněná odvozená třída s chráněnými členy“.

Soukromá odvozená třída se soukromými členy
V deklaraci výše odvozené třídy nahraďte specifikátor „protected“ za „private“:

třída ChildCla: soukromá TheCla

Zkompilujte a spusťte program. Tento výsledek se neliší od případu „Soukromá odvozená třída s chráněnými členy“.

Závěr

Specifikátory přístupu v C ++ jsou slova „soukromý“, „chráněný“ a „veřejný“.„Rozhodují o přístupu pro členy třídy. Oblast specifikátoru přístupu začíná od jeho popisku, na konec popisu třídy (definice) nebo na začátek jiného specifikátoru přístupu. Kterýkoli člen třídy má přístup k jakémukoli jinému členovi stejné třídy. K soukromému členovi třídy nelze přistupovat pomocí žádné vnější funkce, žádného vnějšího operátora nebo odvozené třídy.

Člen základní třídy musí být chráněn, aby k soukromému členovi základní třídy mohl přistupovat člen odvozené třídy. Tento chráněný člen základní třídy je viděn jako soukromý člen základní třídy vnější funkcí nebo vnějším operátorem.

K veřejnému členovi třídy lze přistupovat jakoukoli vnější funkcí, jakýmkoli vnějším operátorem nebo odvozenou třídou.

Při absenci jakéhokoli specifikátoru přístupu ve třídě se předpokládá soukromý specifikátor. To znamená, že výchozí specifikátor přístupu je soukromý.

Odkazy použité v této práci

  • Alireza Ebrahimi, DĚDICTVÍ: OPAKOVATELNOST A ROZŠÍŘITELNOST
  • S. Malik, datové struktury pomocí C ++ 2. vydání
Přidejte gesta myši do Windows 10 pomocí těchto bezplatných nástrojů
V posledních letech se počítače a operační systémy značně vyvinuly. Bývaly doby, kdy uživatelé museli procházet správci souborů pomocí příkazů. Stejně...
Ovládejte a spravujte pohyb myši mezi více monitory ve Windows 10
Správce myší se dvěma displeji umožňuje ovládat a konfigurovat pohyb myši mezi více monitory zpomalením jeho pohybů poblíž hranice. Windows 10/8 vám u...
WinMouse vám umožňuje přizpůsobit a vylepšit pohyb ukazatele myši na PC s Windows
Chcete-li vylepšit výchozí funkce ukazatele myši, použijte freeware WinMouse. Přidává další funkce, které vám pomohou vytěžit ze své skromné ​​myši ma...