C ++ piekļuves norādītāji

C Access Specifiers



C ++ klase ir mainīgo un funkciju kopums, kas ir konfigurēts 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 daudzus objektus. Viens objekts atšķiras no cita objekta saskaņā ar citu vērtību kopumu, kas piešķirts otra objekta mainīgajiem. Tiek uzskatīts, ka objekta izveidošana no klases ir objekta eksponēšana. Pat ja diviem dažādiem objektiem ir vienādas vērtības to mainīgajiem, šie objekti ir dažādas entītijas, kuras programmā identificē ar dažādiem nosaukumiem. Objekta un tā atbilstošās klases mainīgos sauc par datu dalībniekiem. Objekta un tā atbilstošās klases funkcijas sauc par dalībnieku funkcijām. Datu dalībniekus un dalībnieku funkcijas sauc par dalībniekiem.

Vārds piekļuve nozīmē lasīt vai mainīt mainīgā vērtību, kā arī izmantot funkciju. C ++ piekļuves specifikatori ir vārdi privāti, aizsargāti un publiski. Viņi izlemj, vai dalībnieks var piekļūt citiem tās klases dalībniekiem, vai arī funkcija vai operators ārpus klases, kas nepieder klasei, var piekļūt jebkuram klases dalībniekam. Viņi arī izlemj, vai atvasinātas (bērnu) klases dalībnieks 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
Jebkurš klases dalībnieks var piekļūt jebkuram citam tās pašas klases dalībniekam, neatkarīgi no tā, kurš ir apzīmēts kā publisks vai privāts. Apsveriet šādu programmu:



#iekļaut
izmantojot vārda telpastundas;

klaseTheCla
{
Privāts:
intnum1;
intnum2;
publiski:
TheCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intmetodi()
{
atgrieztiesnum1;
}
};

intgalvenais()
{
TheCla obj(10,divdesmit);
int2=obj.metodi();
izmaksas<<2<<' n';

// int nr1 = obj.num1;

atgriezties 0;
}

Rezultāts ir 10. Privātie dalībnieki ir num1 un num2. Publiskie dalībnieki ir TheCla () un metode (). Ņemiet vērā, ka TheCla () ir konstruktoru 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.





Galvenajā () funkcijā pirmais apgalvojums ir konstruktoru funkciju veidojošs paraugs, kas inicializē num1 un num2. Nākamais paziņojums izsauc klases publisko dalībnieku, metodi ().

Tagad 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. Jebkurš klases apraksta dalībnieks var piekļūt jebkuram citam tās pašas klases apraksta dalībniekam; nav svarīgi, kurš loceklis ir privāts vai publisks.



Tomēr funkcija vai operators, kas nav deklarēts klases aprakstā un ārpus klases apraksta, var piekļūt tikai klases publiskajiem dalībniekiem. Piemēram, galvenā () funkcija ir funkcija, kas deklarēta ārpus klases apraksta. Tā ir varējusi piekļūt tikai metodei () un TheCla () publiskajiem dalībniekiem. Galvenās () funkcijas iekšpusē TheCla () funkcija 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 indikatoru // no pēdējā paziņojuma galvenajā (). Ja mēģināt apkopot programmu, ņemiet vērā, ka programma netiks apkopota, parādot 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ā šis apraksts, privāts, bet bez specifikācijas:

klaseTheCla
{
intnum1;
intnum2;
publiski:
TheCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intmetodi()
{
atgrieztiesnum1;
}
};

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

Aizsargāts specifikators

Klases aprakstā un no ārējās funkcijas vai ārējā operatora aizsargātais specifikators ir tāds pats kā privātais specifikators. Tagad aizstājiet privāto specifikatoru iepriekš minētajā programmā ar specifikatoru, aizsargājiet un noņemiet komentāra indikatoru // no pēdējā (bet viens) paziņojuma galvenajā () funkcijā. Ja mēģināt apkopot programmu, ņemiet vērā, ka programma netiks apkopota, parādot kļūdas ziņojumu.

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

Publiski atvasināta klase ar sabiedriskajiem biedriem
Apsveriet šādu programmu:

#iekļaut
izmantojot vārda telpastundas;

klaseTheCla
{
publiski:
intnum1= 10;
aizsargāts:
intnum2= divdesmit;
Privāts:
intnum3= 30;
};

klaseChildCla: publiskiTheCla
{
publiski:
intmetode1()
{
atgrieztiesnum1;
}
intmetode2()
{
atgrieztiesnum2;
}
/*int metode3 ()
{
atgriešanās numurs 3;
} * /

};

intgalvenais()
{
BērnsCla bērnsObj;
intnē1=bērnsObj.metode1();
izmaksas<<nē1<<' n';

int2=bērnsObj.metode2();
izmaksas<<2<<' n';

atgriezties 0;
}

Izeja ir:
10
divdesmit

Bāzes klasē numurs1 ir publisks, numurs2 ir aizsargāts un numurs3 ir privāts. Atvasinātajā klasē visas dalībnieku funkcijas ir publiskas. Pirmā funkcija, metode1 (), piekļūst publisko datu dalībniekam, num1. Otra funkcija, metode2 (), piekļūst aizsargātajam datu loceklim, num2. Trešajai funkcijai, metodei 3 (), lai gan tā pašlaik ir komentēta, vajadzētu piekļūt privātajam datu loceklim num3.

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

klaseChildCla: publiskiTheCla{}

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

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

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

Atvasinātie klases un dalībnieku specifikatori

Aizsargāta atvasinātā klase ar publiskiem biedriem
Iepriekšējās atvasinātās klases deklarācijā aizstājiet publisko specifikatoru ar aizsargātu šādi:

klaseChildCla: aizsargātsTheCla{}

Apkopojiet 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 privātajiem pamatklases dalībniekiem. Tomēr tās locekļi var piekļūt sabiedrībai un aizsargātajiem pamatklases pārstāvjiem. Tas ir tas pats, kas atvasinātās klases pasludināšana par publisku.

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

Privāta atvasināta klase ar publiskiem dalībniekiem
Iepriekš atvasinātās klases deklarācijā aizstājiet aizsargāto specifikatoru ar privāto šādi:

klaseChildCla: PrivātsTheCla{}

Apkopojiet 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 privātu, tās dalībnieki nevar piekļūt privātajiem pamatklases locekļiem. Tomēr tās locekļi var piekļūt sabiedrībai un aizsargātajiem pamatklases pārstāvjiem. Tas ir tas pats, kas atvasinātās klases pasludināšana par aizsargātu vai publisku.

Publiski atvasināta klase ar aizsargātiem dalībniekiem
Ierakstiet, apkopojiet 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 vārda telpastundas;

klaseTheCla
{
publiski:
intnum1= 10;
aizsargāts:
intnum2= divdesmit;
Privāts:
intnum3= 30;
};

klaseChildCla: publiskiTheCla
{
aizsargāts:
intmetode1()
{
atgrieztiesnum1;
}
intmetode2()
{
atgrieztiesnum2;
}
/*int metode3 ()
{
atgriešanās numurs 3;
} * /

};

intgalvenais()
{
/*BērnsCla bērnsObj;
int nr1 = bērnsObj.metode1 ();
izmaksas<
/*int no2 = bērnsObj.metode2 ();
izmaksas<
atgriezties 0;
}

Programma darbojas tā, kā ir. Pamatojoties uz to, kā programma ir ierakstīta, nav izvades un nav arī nekādas izejas.

Tagad atceltajā klasē noņemiet komentāru par funkcijas definīciju, metodi3 (). Ja mēģināt apkopot programmu, ņemiet vērā, ka tā netiks apkopota, parādot kļūdas ziņojumu. Tas nozīmē, ka privātajam loceklim nevar piekļūt no ārējas funkcijas, ārēja operatora vai atvasinātas klases. Tas ir tas pats secinājums, kas tika izdarīts iepriekš attiecībā uz piekļuvi privātam biedram.

Piezīme : aizsargātas atvasinātās klases loceklis var piekļūt aizsargātam pamatklases dalībniekam.

Tagad ievietojiet komentārus atvasinātajā klasē un noņemiet komentārus pirmajā koda segmentā galvenajā () funkcijā. Ja mēģināt apkopot programmu, ņemiet vērā, ka programma netiks apkopota, jo galvenais () funkcijas kods ir pirmais. Šis efekts nav jauns. Papildus atvasinātajai klasei, ārējām funkcijām un ārējiem operatoriem (bāzes vai atvasinātās) klases aizsargātie un privātie dalībnieki ir viena un tā paša specifikatora - privāti. Galvenajā () funkcijā jebkuras klases aizsargāts dalībnieks, neatkarīgi no tā, vai tas ir bāzes vai atvasināts, ir tā paša specifikatora privāts, un tam ir aizliegts piekļūt.

Ja galvenās () funkcijas otrais koda segments nav komentēts, tiks piemērots tas pats skaidrojums. Tas nozīmē, ka galvenā () funkcija nevarēs piekļūt aizsargātas vai privātas atvasinātās klases vai pamatklases dalībniekam. Tas nav atkarīgs no tā, vai atvasinātās klases aizsargātais dalībnieks varētu piekļūt aizsargātam pamatklases dalībniekam.

Aizsargāta atvasināta klase ar aizsargātiem locekļiem
Iepriekšējās atvasinātās klases deklarācijā aizstājiet publisko specifikatoru ar aizsargātu šādi:

klaseChildCla: aizsargātsTheCla{}

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

Privāta atvasināta klase ar aizsargātiem dalībniekiem
Iepriekš atvasinātās klases deklarācijā aizstājiet aizsargāto specifikatoru ar privāto šādi:

klaseChildCla: PrivātsTheCla

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

Publiski atvasināta klase ar privātiem dalībniekiem
Iepriekš atvasinātās klases deklarācijā aizstājiet privāto specifikatoru ar publisku šādi:

klaseChildCla: publiskiTheCla{}

Padariet atvasinātās klases dalībniekus privātus. Apkopojiet un palaidiet programmu. Rezultāts neatšķiras no gadījuma “Publiskā atvasinātā klase ar aizsargātiem locekļiem”.

Aizsargāta atvasināta klase ar privātiem dalībniekiem
Iepriekšējās atvasinātās klases deklarācijā aizstājiet publisko specifikatoru ar aizsargātu šādi:

klaseChildCla: aizsargātsTheCla{}

Apkopojiet un palaidiet programmu. Šis rezultāts neatšķiras no lietas Aizsargāta atvasināta klase ar aizsargātiem locekļiem.

Privāta atvasināta klase ar privātiem dalībniekiem
Iepriekš atvasinātās klases deklarācijā aizstājiet aizsargāto specifikatoru ar privāto šādi:

klaseChildCla: PrivātsTheCla{}

Apkopojiet un palaidiet programmu. Šis rezultāts neatšķiras no gadījuma ar privāto atvasināto klasi ar aizsargātiem dalībniekiem.

Secinājums

C ++ piekļuves specifikatori ir vārdi privāts, aizsargāts un publisks. Viņi lemj par piekļuvi klases dalībniekiem. 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 neviena ārēja funkcija, neviens ārējs operators vai atvasināta klase.

Bāzes klases dalībniekam jābūt aizsargātam, lai atvasinātās klases pārstāvis varētu piekļūt privātai pamatklases dalībniecei. Šo aizsargāto pamatklases locekli ārējā funkcija vai ārējs operators uzskata par pamatklases privātu dalībnieku.

Klases publiskajam loceklim var piekļūt jebkura ārēja funkcija, jebkurš ārējs operators vai atvasināta klase.

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

Šajā darbā izmantotās atsauces