C ++

C ++ hozzáférési specifikációk

C ++ hozzáférési specifikációk
A C ++ nyelven az osztály változók és függvények halmaza, amelyeket úgy konfiguráltak, hogy együtt működjenek. Amikor az osztály változóinak értékeket adnak, akkor egy objektumot kapunk. Egy objektum ugyanazokkal a változókkal és funkciókkal rendelkezik, mint egy osztály, de ezúttal a változóknak vannak értékeik. Sok objektum hozható létre egy osztályból. Egy objektum különbözik egy másik objektumtól a másik objektum változóihoz rendelt különböző értékkészlet szerint. Egy objektum osztályból történő létrehozása állítólag az objektumot példányosítja. Még akkor is, ha két különböző objektum változóinak ugyanazok az értékei vannak, ezek az objektumok különböző entitások, amelyeket a program különböző nevekkel azonosít. Az objektum és a hozzá tartozó osztály változóit adattagoknak nevezzük. Az objektum és a hozzá tartozó osztály függvényeit tagfüggvényeknek nevezzük. Az adattagokat és a tagfunkciókat tagoknak nevezzük.

A hozzáférés szó azt jelenti, hogy elolvassa vagy megváltoztatja egy változó értékét, és azt is jelenti, hogy használjon egy függvényt. A C ++ hozzáférési specifikátorok a „privát”, a „védett” és a „nyilvános” szavak.”Döntenek arról, hogy egy tag hozzáférhet-e az osztályának többi tagjához, vagy az osztályon kívüli és az osztályhoz nem tartozó funkció vagy operátor hozzáférhet-e az osztály bármely tagjához. Azt is eldöntik, hogy a származtatott (gyermek) osztály tagjai hozzáférhetnek-e egy szülő osztály tagjához.

A C ++ alapismeretei szükségesek a cikk megértéséhez és a megadott kód teszteléséhez.

A cikk tartalma

Nyilvános és magán specifikátorok

Osztály
Az osztály bármely tagja hozzáférhet ugyanannak az osztálynak bármely más tagjához, függetlenül attól, hogy „nyilvános” vagy „privát”.Tekintsük a következő programot:

#include
névtér használata std;
osztály TheCla

magán:
int num1;
int num2;
nyilvános:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int módszer ()

return num1;

;
int main ()

TheCla obj (10, 20);
int no2 = obj.módszer();
cout<// int no1 = obj.num1;
visszatér 0;

A kimenet 10. A privát tagok a num1 és a num2. A nyilvánosság tagjai a TheCla () és a method (). Ne feledje, hogy a TheCla () az a konstruktor függvény, amely inicializálja az érdeklődésre számot tartó változókat. A hozzáférési specifikátor régiója a címkéjétől az osztályleírás (meghatározás) végéig vagy egy másik hozzáférési specifikátor elejéig kezdődik.

A main () függvényben az első utasítás a konstruktor függvényt érintő példányosítás, amely inicializálja a num1 és a num2 értékeket. A következő utasítás az osztály nyilvános tagját, metódust () hívja meg.

Az osztályleírásban (definíció) a nyilvános tag, a TheCla () függvény hozzáfér a privát tagokhoz, a num1 és a num2. Ezenkívül a public member függvény, a method () hozzáfér a num1 privát taghoz. Az osztályleírás bármely tagja hozzáférhet az osztályleírás bármely más tagjához; nem számít, melyik tag magán vagy állami.

Az osztályleírásban nem szereplő és az osztályleíráson kívüli funkció vagy operátor azonban csak az osztály nyilvános tagjaihoz férhet hozzá. A main () függvény például az osztályleíráson kívül deklarált függvény. Csak a módszerhez () és a TheCla () nyilvános tagokhoz tudott hozzáférni. A main () függvényen belül a TheCla () függvény az obj (10, 20).

Külső függvény vagy külső operátor, például a main () függvény, nem férhet hozzá az osztály egyik privát tagjához, például num1 vagy num2. Távolítsa el a // megjegyzésjelzőt a main () utolsó előtti utasításból. Ha megpróbálja lefordítani a programot, vegye figyelembe, hogy a program nem fordít, és hibaüzenetet küld.

Alapértelmezett specifikátor
Az osztály alapértelmezett specifikálója: „private.”Tehát, a fenti osztályleírás megegyezik a következő leírással, privát, de a specifikátor nélkül:

osztály TheCla

int num1;
int num2;
nyilvános:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int módszer ()

return num1;

;

jegyzet: a hozzáférés-specifikáló címke a specifikátorral kezdődik, majd kettőspont követi.

A védett specifikátor

Az osztályleírásban és egy külső függvény vagy egy külső operátor által a védett specifikátor megegyezik a privát specifikációval. Most cserélje le a fenti programban a privát specifikációt a specifikátorra, védje meg, és távolítsa el a // megjegyzésjelzőt a main () függvény last-one-one utasításából. Ha megpróbálja lefordítani a programot, vegye figyelembe, hogy a program nem fordít, és hibaüzenetet ad.

A védett specifikátor kérdése akkor merül fel, amikor a származtatott (öröklött) osztály tagjainak hozzáférniük kell az alap (szülő) osztály tagjaihoz.

Nyilvános származtatott osztály a nyilvános képviselőkkel
Fontolja meg a következő programot:

#include
névtér használata std;
osztály TheCla

nyilvános:
int num1 = 10;
védett:
int num2 = 20;
magán:
int num3 = 30;
;
osztály ChildCla: nyilvános TheCla

nyilvános:
int módszer1 ()

return num1;

int módszer2 ()

return num2;

/ * int módszer3 ()

visszatérés num3;
* /
;
int main ()

ChildCla childObj;
int no1 = gyermekObj.módszer1 ();
cout<int no2 = gyermekObj.módszer2 ();
cout<visszatér 0;

A kimenet:
10
20

Az alaposztályban a num1 nyilvános, a num2 védett és a num3 privát. A származtatott osztályban az összes tagfüggvény nyilvános. Az első függvény, a method1 (), hozzáfér a nyilvános adat taghoz, a num1-hez. A második függvény, a method2 (), hozzáfér a védett adattaghoz, a num2-hez. A harmadik függvény, a method3 (), bár jelenleg kommentálva van, hozzá kell férnie a privát adat taghoz, a num3-hoz.

A származtatott osztály nem deklarálható hozzáférési specifikátor (nyilvános, védett vagy magán) nélkül. Fent a származtatott osztályt a nyilvános specifikátorral deklaráljuk, vagyis:

class ChildCla: nyilvános TheCla

Most törölje a származtatott osztály harmadik tagfüggvény-megjegyzésének megjegyzését. Ha megpróbálja lefordítani a programot, vegye figyelembe, hogy a program nem fordítja le, és hibaüzenetet ad.

jegyzet: Ha az egész levezetett osztályt nyilvánossá nyilvánítják, tagjai nem férhetnek hozzá az alaposztály magán tagjaihoz. Tagjai azonban hozzáférhetnek az alaposztály nyilvánosságához és védett tagjaihoz. A fenti program ezt szemlélteti.

Azonban vegye figyelembe, hogy a nyilvános származtatott osztály nyilvános tagja hozzáférhet az alaposztály védett tagjához.

Származtatott osztály-specifikátorok és tag-specifikátorok

Védett levezetett osztály nyilvános tagokkal
A fenti származtatott osztály deklarációjában cserélje ki a „public” specifikációt a „protected” -re a következőképpen:

class ChildCla: védett TheCla

Fordítsa le és futtassa a programot, és vegye figyelembe, hogy az eredmény ugyanaz, mint korábban.

Tehát, amikor az egész levezetett osztályt védetté nyilvánítják, tagjai nem férhetnek hozzá az alaposztály magán tagjaihoz. Tagjai azonban hozzáférhetnek az alaposztály nyilvánosságához és védett tagjaihoz. Ez ugyanaz, mint amikor a levezetett osztályt nyilvánossá nyilvánítják.

jegyzet: a nyilvános származtatott osztály védett tagja hozzáférhet az alaposztály védett tagjához.

Privát levezetett osztály nyilvános tagokkal
A fenti származtatott osztály deklarációjában cserélje ki a „védett” specifikációt „privátra” a következőképpen:

class ChildCla: privát TheCla

Fordítsa le és futtassa a programot, és vegye figyelembe, hogy az eredmény ugyanaz, mint korábban.

Tehát, ha az egész származtatott osztályt privátnak nyilvánítják, tagjai nem férhetnek hozzá az alaposztály magántagjaihoz. Tagjai azonban hozzáférhetnek az alaposztály nyilvánosságához és védett tagjaihoz. Ez ugyanaz, mint amikor a származtatott osztályt védetté vagy nyilvánossá nyilvánítják.

Nyilvános levezetett osztály védett tagokkal
Gépelje be, fordítsa le és futtassa a következő programot, amelyben a teljes származtatott osztály és tagjai is védettek. Néhány kódszegmens a következő:

#include
névtér használata std;
osztály TheCla

nyilvános:
int num1 = 10;
védett:
int num2 = 20;
magán:
int num3 = 30;
;
osztály ChildCla: nyilvános TheCla

védett:
int módszer1 ()

return num1;

int módszer2 ()

return num2;

/ * int módszer3 ()

visszatérés num3;
* /
;
int main ()

/ * ChildCla childObj;
int no1 = gyermekObj.módszer1 ();
cout</ * int no2 = gyermekObj.módszer2 ();
cout<visszatér 0;

A program úgy működik, ahogy van. Nincs kimenet, és állítólag nincs is kimenet, a program begépelése alapján.

Most törölje a (z) method3 () függvénydefiníció megjegyzését a származtatott osztályban. Ha megpróbálja lefordítani a programot, vegye figyelembe, hogy a program nem fordítja le, és hibaüzenetet ad. Ez azt jelenti, hogy egy magántag nem érhető el külső funkcióból, külső operátorból vagy származtatott osztályból. Ez ugyanaz a következtetés, amelyet a fentiekben megállapítottunk a magántaghoz való hozzáféréssel kapcsolatban.

jegyzet: a védett származtatott osztály védett tagja hozzáférhet az alaposztály védett tagjához.

Tegye vissza a megjegyzéseket a származtatott osztályba, és törölje az első kódszegmens megjegyzését a main () függvényben. Ha megpróbálja lefordítani a programot, vegye figyelembe, hogy a program nem fordít a main () függvény első kódszegmense miatt. Ez a hatás nem új keletű. A származtatott osztályon, a külső függvényeken és a külső operátorokon kívül az (alap vagy származtatott) osztály védett és magán tagjai azonos specifikációjúak, magán. A main () függvény bármely osztály védett tagját látja, legyen az alap vagy származtatott, ugyanolyan specifikációból, privát, és tilos hozzáférni ahhoz.

Ha a main () függvény második kódszegmensét nem kommentelik, ugyanaz a magyarázat érvényes. Vagyis a main () függvény nem lesz képes hozzáférni a származtatott osztály vagy az alaposztály védett vagy privát tagjához. Ez független attól, hogy a származtatott osztály védett tagja hozzáférhet-e az alaposztály védett tagjához.

Védett levezetett osztály védett tagokkal
A fenti származtatott osztály deklarációjában cserélje ki a „public” specifikációt a „protected” -re a következőképpen:

class ChildCla: védett TheCla

Helyezze vissza a kódszegmensek megjegyzését a main () függvénybe, ha ezt még nem tették meg. Fordítsa le és futtassa a programot, és vegye figyelembe, hogy az eredmény a korábbiakhoz hasonló.

Privát származékos osztály védett tagokkal
A fenti származtatott osztály deklarációjában cserélje ki a „védett” specifikációt „privátra” a következőképpen:

osztály ChildCla: privát TheCla

Fordítsa le és futtassa a programot, és vegye figyelembe, hogy az eredmény a korábbiakhoz hasonló lesz.

Nyilvános levezetett osztály magántagokkal
A fenti származtatott osztály deklarációjában cserélje ki a „private” specifikációt a „public” kifejezésre az alábbiak szerint:

class ChildCla: nyilvános TheCla

Tegye priváttá a levezetett osztály tagjait. Fordítsa le és futtassa a programot. Az eredmény nem különbözik a „Nyilvános származtatott osztály védett tagokkal” ügytől.

Védett levezetett osztály magántagokkal
A fenti származtatott osztály deklarációjában cserélje ki a „public” specifikációt a „protected” -re a következőképpen:

class ChildCla: védett TheCla

Fordítsa le és futtassa a programot. Ez az eredmény nem különbözik a „Védett származtatott osztály védett tagokkal” esettől.

Magán származtatott osztály magán tagokkal
A fenti származtatott osztály deklarációjában cserélje ki a „védett” specifikációt „privátra” a következőképpen:

class ChildCla: privát TheCla

Fordítsa le és futtassa a programot. Ez az eredmény nem különbözik a „Magán származtatott osztály védett tagokkal” ügytől.

Következtetés

A C ++ hozzáférési specifikátorok a „privát”, a „védett” és a „nyilvános” szavak.”Döntenek az osztály tagjai hozzáféréséről. A hozzáférési specifikátor régiója a címkéjétől az osztályleírás (meghatározás) végéig vagy egy másik hozzáférési specifikátor elejéig kezdődik. Az osztály bármely tagja hozzáférhet ugyanannak az osztálynak bármely más tagjához. Egy osztály magán tagjához semmilyen külső funkció, külső operátor vagy származtatott osztály nem férhet hozzá.

Az alaposztály tagját védetté kell tenni, hogy a származtatott osztály tagja hozzáférhessen az alaposztály magán tagjához. Az alaposztály ezen védett tagját egy külső funkció vagy egy külső operátor látja az alaposztály magántagjának.

Egy osztály nyilvános tagját bármely külső funkció, bármely külső operátor vagy egy származtatott osztály elérheti.

Ha egy osztályban nincs hozzáférési specifikáció, akkor a privát specifikációt feltételezzük. Vagyis az alapértelmezett hozzáférési specifikátor privát.

A munkában használt hivatkozások

  • Alireza Ebrahimi, ÖRÖKLÉS: FELHASZNÁLHATÓSÁG ÉS BŐVÍTHETŐSÉG
  • S. Malik, Adatszerkezetek a C ++ 2nd Edition használatával
Az egér és az érintőpadok görgetési irányának megfordítása a Windows 10 rendszerben
Egér és Érintőpads nemcsak a számítást könnyűvé, de hatékonyabbá és kevésbé időigényessé is teszi. Nem tudunk elképzelni egy életet ezek nélkül az esz...
Az egérmutató és a kurzor méretének, színének és sémájának módosítása a Windows 10 rendszeren
Az egérmutató és a kurzor a Windows 10 operációs rendszerben nagyon fontos szempont. Ez elmondható más operációs rendszerekről is, tehát valójában eze...
Ingyenes és nyílt forráskódú játékmotorok a Linux játékok fejlesztéséhez
Ez a cikk felsorolja azokat az ingyenes és nyílt forráskódú játékmotorokat, amelyek felhasználhatók 2D és 3D játékok fejlesztésére Linuxon. Számos ily...