C ++

C ++ piekļuves specifikatori

C ++ piekļuves specifikatori
C ++ klasē ir mainīgo un funkciju kopa, kas ir konfigurēta darbam kopā. Kad klases mainīgajiem tiek dotas vērtības, tiek iegūts objekts. Objektam ir tādi paši mainīgie un funkcijas kā klasei, taču šoreiz mainīgajiem ir vērtības. No vienas klases var izveidot daudz objektu. Viens objekts atšķiras no cita objekta pēc atšķirīgajām vērtību kopām, kas piešķirtas otra objekta mainīgajiem. Tiek teikts, ka objekta izveide no klases ir objekta tūlītēja aktivizēšana. Pat ja diviem dažādiem objektiem ir vienādas to mainīgo vērtības, šie objekti ir dažādas entītijas, kuras programmā identificē ar dažādiem nosaukumiem. Objekta un tam atbilstošās klases mainīgos sauc par datu dalībniekiem. Objekta un tam atbilstošās klases funkcijas sauc par dalībnieka funkcijām. Datu dalībniekus un dalībnieku funkcijas sauc par dalībniekiem.

Vārds piekļuve nozīmē mainīgā vērtības nolasīšanu vai mainīšanu, kā arī funkcijas izmantošanu. C ++ piekļuves specifikatori ir vārdi “privāts”, “aizsargāts” un “publisks”.”Viņi izlemj, vai dalībnieks var piekļūt citiem tās klases locekļiem, vai funkcija vai operators ārpus klases, kas nepieder pie klases, var piekļūt jebkuram klases dalībniekam. Viņi arī izlemj, vai atvasinātas (bērnu) klases loceklis var piekļūt vecāku klases dalībniekam.

Lai saprastu šo rakstu un pārbaudītu sniegto kodu, ir nepieciešamas pamatzināšanas par C ++.

Raksta saturs

Publiskie un privātie specifikatori

Klase
Ikviens klases loceklis var piekļūt jebkuram citam tās pašas klases dalībniekam, neatkarīgi no kura ir apzīmējums “publisks” vai “privāts.Apsveriet šādu programmu:

# iekļaut
izmantojot nosaukumvietu std;
klase TheCla

Privāts:
int num1;
int num2;
publiski:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int metode ()

atgriešanās num1;

;
int main ()

TheCla obj (10, 20);
int no2 = obj.metode ();
cout<// int no1 = obj.num1;
atgriešanās 0;

Rezultāts ir 10. Privātie dalībnieki ir num1 un num2. Sabiedrības locekļi ir TheCla () un method (). Ņemiet vērā, ka TheCla () ir konstruktora funkcija, kas inicializē interesējošos mainīgos. Piekļuves specifikatora reģions sākas no tā etiķetes līdz klases apraksta (definīcijas) beigām vai cita piekļuves specifikatora sākumam.

Funkcijā main () pirmais paziņojums ir instancēšana, kurā iesaistīta konstruktora funkcija, kas inicializē num1 un num2. Nākamais paziņojums izsauc klases publisko biedru, metodi ().

Klases aprakstā (definīcijā) publiskā dalībnieka funkcija TheCla () piekļūst privātajiem dalībniekiem num1 un num2. Arī publiskā dalībnieka funkcija, metode () piekļūst privātajam dalībniekam num1. Ikviens klases apraksta dalībnieks var piekļūt jebkuram citam dalībniekam tajā pašā klases aprakstā; nav svarīgi, kurš loceklis ir privāts vai publisks.

Tomēr funkcija vai operators, kas nav norādīts klases aprakstā un ārpus klases apraksta, var piekļūt tikai publiskiem klases dalībniekiem. Piemēram, galvenā () funkcija ir funkcija, kas deklarēta ārpus klases apraksta. Tas ir varējis piekļūt tikai metodei () un TheCla () publiskajiem dalībniekiem. Main () funkcijas iekšpusē funkcija TheCla () ir obj (10, 20).

Ārēja funkcija vai ārējs operators, piemēram, galvenā () funkcija, nevar piekļūt nevienam no klases privātajiem dalībniekiem, piemēram, num1 vai num2. Noņemiet komentāra rādītāju // no galvenā pēdējā paziņojuma (). Ja mēģināt kompilēt programmu, ņemiet vērā, ka programma nekompilēs, sniedzot kļūdas ziņojumu.

Noklusējuma specifikators
Klases noklusējuma specifikators ir “privāts.Tātad iepriekšminētais klases apraksts ir tāds pats kā šāds, privāts, bet bez specifikatora:

klase TheCla

int num1;
int num2;
publiski:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int metode ()

atgriešanās num1;

;

Piezīme: piekļuves specifikatora etiķete sākas ar specifikatoru, un pēc tam seko kols.

Aizsargātais specifikators

Klases aprakstā un no ārpuses funkcijas vai ārēja operatora aizsargātais specifikators ir tāds pats kā privātais specifikators. Tagad nomainiet iepriekšējās programmas privāto specifikatoru ar specifikatoru, aizsargājiet un noņemiet komentāra indikatoru // no galvenās () pēdējās paziņojuma. Ja mēģināt kompilēt programmu, ņemiet vērā, ka programma neapkopos, sniedzot kļūdas ziņojumu.

Aizsargātā specifikatora jautājums rodas, kad atvasinātās (mantotās) klases dalībniekiem ir jāpiekļūst bāzes (vecāku) klases dalībniekiem.

Publiski atvasināta klase ar sabiedrības locekļiem
Apsveriet šādu programmu:

# iekļaut
izmantojot nosaukumvietu std;
klase TheCla

publiski:
int num1 = 10;
aizsargāts:
int num2 = 20;
Privāts:
int num3 = 30;
;
klase ChildCla: publiskā TheCla

publiski:
int metode1 ()

atgriešanās num1;

int metode2 ()

atgriešanās num2;

/ * int metode3 ()

atgriešanās num3;
* /
;
int main ()

ChildCla childObj;
int no1 = bērnsObj.metode1 ();
cout<int no2 = bērnsObj.metode2 ();
cout<atgriešanās 0;

Rezultāts ir:
10
20

Bāzes klasē num1 ir publisks, num2 ir aizsargāts un num3 ir privāts. Atvasinātajā klasē visas dalībnieka funkcijas ir publiskas. Pirmā funkcija method1 () piekļūst publisko datu dalībniekam num1. Otra funkcija, method2 (), piekļūst aizsargātajam datu dalībniekam num2. Trešajai funkcijai method3 (), lai arī pašlaik tā tiek komentēta, vajadzētu piekļūt privāto datu dalībniekam num3.

Atvasinātā klase netiek deklarēta bez piekļuves specifikatora (publiska, aizsargāta vai privāta). Augstāk atvasinātā klase tiek deklarēta ar publisko specifikatoru, tas ir:

klase ChildCla: publiskā TheCla

Tagad atņemiet komentāru trešās dalībnieka funkcijas definīcijai atvasinātajā klasē. Ja mēģināt kompilēt programmu, ņemiet vērā, ka tā netiks apkopota, sniedzot kļūdas ziņojumu.

Piezīme: Kad visa atvasinātā klase tiek pasludināta par publisku, tās dalībnieki nevar piekļūt pamatklases privātajiem biedriem. Tās locekļi tomēr var piekļūt sabiedrībai un aizsargātiem bāzes klases pārstāvjiem. Iepriekš aprakstītā programma to ilustrē.

Tomēr ņemiet vērā, ka publiskas atvasinātas klases publisks loceklis var piekļūt aizsargātam pamatklases dalībniekam.

Atvasinātie klases specifikatori un dalībnieku specifikācijas

Aizsargāta atvasināta klase ar publiskiem locekļiem
Iepriekš atvasinātās klases deklarācijā aizstājiet “publisko” specifikāciju ar “aizsargātu” šādi:

klase ChildCla: aizsargāta TheCla

Sastādiet un palaidiet programmu un ņemiet vērā, ka rezultāts ir tāds pats kā iepriekš.

Tātad, kad visa atvasinātā klase tiek pasludināta par aizsargātu, tās dalībnieki nevar piekļūt bāzes klases privātajiem biedriem. Tās locekļi tomēr var piekļūt sabiedrībai un aizsargātiem bāzes klases pārstāvjiem. Tas ir tas pats, kas tad, kad atvasinātā klase tiek pasludināta par publisku.

Piezīme: publiskas atvasinātas klases aizsargāts loceklis var piekļūt aizsargātam pamatklases loceklim.

Privāta atvasināta klase ar publiskiem locekļiem
Iepriekš atvasinātās klases deklarācijā aizstājiet “aizsargāto” specifikatoru ar “privātu” šādi:

klase ChildCla: privātā TheCla

Sastādiet un palaidiet programmu un ņemiet vērā, ka rezultāts ir tāds pats kā iepriekš.

Tātad, ja visa atvasinātā klase tiek pasludināta par privātu, tās dalībnieki nevar piekļūt bāzes klases privātajiem biedriem. Tās locekļi tomēr var piekļūt sabiedrībai un aizsargātiem bāzes klases pārstāvjiem. Tas ir tas pats, kas tad, kad atvasinātā klase tiek pasludināta par aizsargātu vai publisku.

Publiska atvasināta klase ar aizsargātiem biedriem
Ierakstiet, kompilējiet un palaidiet šādu programmu, kurā tiek aizsargāta visa atvasinātā klase un tiek aizsargāti arī tās dalībnieki. Daži koda segmenti ir šādi:

# iekļaut
izmantojot nosaukumvietu std;
klase TheCla

publiski:
int num1 = 10;
aizsargāts:
int num2 = 20;
Privāts:
int num3 = 30;
;
klase ChildCla: publiskā TheCla

aizsargāts:
int metode1 ()

atgriešanās num1;

int metode2 ()

atgriešanās num2;

/ * int metode3 ()

atgriešanās num3;
* /
;
int main ()

/ * ChildCla childObj;
int no1 = bērnsObj.metode1 ();
cout</ * int no2 = bērnsObj.metode2 ();
cout<atgriešanās 0;

Programma darbojas tāda, kāda tā ir. Nav izejas, un nav domājams, ka tam būtu izvade, pamatojoties uz programmas rakstīšanas veidu.

Tagad atņemiet komentāru funkcijas definīcijai method3 () atvasinātajā klasē. Ja mēģināt kompilēt programmu, ņemiet vērā, ka tā netiks apkopota, sniedzot kļūdas ziņojumu. Tas nozīmē, ka privātajam dalībniekam nevar piekļūt no ārējas funkcijas, ārēja operatora vai atvasinātas klases. Šis ir tas pats secinājums, kas tika izdarīts iepriekš, attiecībā uz piekļuvi privātajam loceklim.

Piezīme: aizsargāts atvasinātās klases loceklis var piekļūt aizsargātam pamatklases loceklim.

Tagad ievietojiet komentārus atvasinātajā klasē un noņemiet komentāru pirmajam koda segmentam galvenajā () funkcijā. Ja mēģināt kompilēt programmu, ņemiet vērā, ka programma netiks apkopota galvenā koda () pirmā koda segmenta dēļ. Šis efekts nav jauns. Papildus atvasinātajai klasei, ārējām funkcijām un ārējiem operatoriem aizsargātie un privātie (bāzes vai atvasinātās) klases locekļi ir tā paša. Main () funkcija redz jebkuras klases aizsargātu locekli, neatkarīgi no tā, vai tā ir privāta, un ir aizliegta tai piekļuve.

Ja galvenās () funkcijas otrais koda segments netiek komentēts, tiks izmantots tas pats skaidrojums. Tas ir, galvenā () funkcija nevarēs piekļūt atvasinātās klases vai bāzes klases aizsargātam vai privātajam dalībniekam. Tas nav atkarīgs no tā, vai atvasinātās klases aizsargāts loceklis varētu piekļūt aizsargātam pamatklases loceklim.

Aizsargāta atvasināta klase ar aizsargātiem biedriem
Iepriekš atvasinātās klases deklarācijā aizstājiet “publisko” specifikāciju ar “aizsargātu” šādi:

klase ChildCla: aizsargāta TheCla

Ievietojiet koda segmentu komentāru atpakaļ galvenajā () funkcijā, ja tas vēl nav izdarīts. Sastādiet un palaidiet programmu un ņemiet vērā, ka rezultāts ir tāds pats kā iepriekš.

Privāta atvasināta klase ar aizsargātiem biedriem
Iepriekš atvasinātās klases deklarācijā aizstājiet “aizsargāto” specifikatoru ar “privātu” šādi:

klase ChildCla: privātā TheCla

Sastādiet un palaidiet programmu un ņemiet vērā, ka rezultāts būs tāds pats kā iepriekš.

Publiska atvasināta klase ar privātiem biedriem
Iepriekš atvasinātās klases deklarācijā aizstājiet “private” specifikatoru ar “public”:

klase ChildCla: publiskā TheCla

Padariet atvasinātās klases dalībniekus privātus. Kompilējiet un palaidiet programmu. Rezultāts neatšķiras no gadījuma “Publiski atvasināta klase ar aizsargātiem biedriem”.

Aizsargāta atvasināta klase ar privātiem biedriem
Iepriekš atvasinātās klases deklarācijā aizstājiet “publisko” specifikāciju ar “aizsargātu” šādi:

klase ChildCla: aizsargāta TheCla

Kompilējiet un palaidiet programmu. Šis rezultāts neatšķiras no gadījuma “Aizsargāta atvasināta klase ar aizsargātiem biedriem”.

Privāta atvasināta klase ar privātiem biedriem
Iepriekš atvasinātās klases deklarācijā aizstājiet “aizsargāto” specifikatoru ar “privātu” šādi:

klase ChildCla: privātā TheCla

Kompilējiet un palaidiet programmu. Šis rezultāts neatšķiras no lietas “Privāta atvasināta klase ar aizsargātiem biedriem”.

Secinājums

C ++ piekļuves specifikatori ir vārdi “privāts”, “aizsargāts” un “publisks”.”Viņi izlemj par klases dalībnieku piekļuvi. Piekļuves specifikatora reģions sākas no tā etiķetes, līdz klases apraksta (definīcijas) beigām vai cita piekļuves specifikatora sākumam. Jebkurš klases dalībnieks var piekļūt jebkuram citam tās pašas klases dalībniekam. Klases privātajam loceklim nevar piekļūt, izmantojot kādu no ārējām funkcijām, ar ārējiem operatoriem vai atvasinātu klasi.

Bāzes klases dalībniekam jābūt aizsargātam, lai atvasinātās klases dalībnieks varētu piekļūt privātajam pamatklases loceklim. Šis aizsargātais pamatklases loceklis tiek uzskatīts par privātu bāzes klases locekli, ko veic kāda ārēja funkcija vai ārējs operators.

Klases publiskam loceklim var piekļūt, izmantojot jebkuru ārēju funkciju, jebkuru ārēju operatoru vai atvasinātu klasi.

Ja klasē nav piekļuves specifikatora, tiek pieņemts, ka privātais specifikators. Tas ir, noklusējuma piekļuves specifikators ir privāts.

Šajā darbā izmantotās atsauces

  • Alireza Ebrahimi, Mantojums: PIEEJAMĪBA UN PAGARINĀJUMS
  • S. Malik, Datu struktūras, izmantojot C ++ 2. izdevumu
Kontrolējiet un pārvaldiet peles kustību starp vairākiem monitoriem sistēmā Windows 10
Dual Display Mouse Manager ļauj kontrolēt un konfigurēt peles kustību starp vairākiem monitoriem, palēninot tās kustību robežas tuvumā. Windows 10/8 ļ...
WinMouse ļauj jums pielāgot un uzlabot peles rādītāja kustību Windows datorā
Ja vēlaties uzlabot peles rādītāja noklusējuma funkcijas, izmantojiet bezmaksas programmatūru WinMouse. Tas pievieno vairāk funkciju, kas palīdzēs jum...
Peles kreisā klikšķa poga nedarbojas operētājsistēmā Windows 10
Ja ar klēpjdatoru vai galddatoru izmantojat īpašu peli, bet nedarbojas peles kreisās klikšķa poga kādu iemeslu dēļ operētājsistēmā Windows 10/8/7 šeit...