C ++

Specificații de acces C ++

Specificații de acces C ++
În C ++, o clasă este un set de variabile și funcții care au fost configurate pentru a funcționa împreună. Când variabilele clasei primesc valori, se obține un obiect. Un obiect are aceleași variabile și funcții ca o clasă, dar de data aceasta, variabilele au valori. Multe obiecte pot fi create dintr-o singură clasă. Un obiect diferă de un alt obiect în funcție de setul diferit de valori atribuite variabilelor celuilalt obiect. Se spune că crearea unui obiect dintr-o clasă este instanțierea obiectului. Chiar dacă două obiecte diferite au aceleași valori pentru variabilele lor, aceste obiecte sunt entități diferite, identificate prin nume diferite în program. Variabilele pentru un obiect și clasa sa corespunzătoare se numesc membri de date. Funcțiile unui obiect și clasa sa corespunzătoare se numesc funcții de membru. Membrii de date și funcțiile de membru sunt numiți membri.

Cuvântul acces înseamnă să citești sau să modifici valoarea unei variabile și înseamnă, de asemenea, să folosești o funcție. Specificatorii de acces C ++ sunt cuvintele „privat”, „protejat” și „public”.”Ei decid dacă un membru poate accesa alți membri ai clasei sale sau dacă o funcție sau un operator din afara clasei și care nu aparține clasei poate accesa orice membru al clasei. Ei decid, de asemenea, dacă un membru al unei clase derivate (copil) poate accesa un membru al unei clase părinte.

Cunoștințele de bază despre C ++ sunt necesare pentru a înțelege acest articol și pentru a testa codul furnizat.

Conținutul articolului

Specificatorii publici și privați

Clasă
Orice membru al unei clase poate accesa orice alt membru al aceleiași clase, independent de care este etichetat „public” sau „privat”.”Luați în considerare următorul program:

#include
folosind spațiul de nume std;
clasa TheCla

privat:
int num1;
int num2;
public:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

metoda int ()

return num1;

;
int main ()

TheCla obj (10, 20);
int no2 = obj.metodă();
cout<// int no1 = obj.num1;
retur 0;

Ieșirea este 10. Membrii privați sunt num1 și num2. Membrii publici sunt TheCla () și method (). Rețineți că TheCla () este funcția constructor care inițializează variabilele de interes. Regiunea unui specificator de acces începe de la eticheta sa până la sfârșitul descrierii clasei (definiție) sau la începutul unui alt specificator de acces.

În funcția main (), prima afirmație este instanțierea care implică funcția constructor, care inițializează num1 și num2. Următoarea declarație cheamă membrul public, method (), al clasei.

Acum, în descrierea clasei (definiție), funcția de membru public, TheCla (), accesează membrii privați, num1 și num2. De asemenea, funcția de membru public, method (), accesează membrul privat, num1. Orice membru dintr-o descriere a clasei poate accesa orice alt membru din aceeași descriere a clasei; nu contează ce membru este privat sau public.

Cu toate acestea, o funcție sau un operator care nu este declarat în descrierea clasei și în afara descrierii clasei poate accesa numai membrii publici ai clasei. Funcția main (), de exemplu, este o funcție declarată în afara descrierii clasei. A putut accesa doar metoda () și membrii publici TheCla (). În interiorul funcției main (), funcția TheCla () este obj (10, 20).

O funcție externă sau un operator extern, cum ar fi funcția main (), nu poate accesa niciunul dintre membrii privați ai clasei, cum ar fi num1 sau num2. Eliminați indicatorul de comentariu, //, din ultima afirmație din main (). Dacă încercați să compilați programul, rețineți că programul nu va compila, oferind un mesaj de eroare.

Specificator implicit
Specificatorul implicit pentru o clasă este „privat.”Deci, descrierea clasei de mai sus este aceeași cu următoarea descriere, privată, dar fără specificator:

clasa TheCla

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

num1 = n1; num2 = n2;

metoda int ()

return num1;

;

Notă: eticheta specificatorului de acces începe cu specificatorul și este apoi urmată de două puncte.

Specificatorul protejat

Într-o descriere a clasei și dintr-o funcție externă sau operator extern, specificatorul protejat este același cu specificatorul privat. Acum, înlocuiți specificatorul privat din programul de mai sus cu specificatorul, protejați și eliminați indicatorul de comentariu, //, din ultima instrucțiune din funcția main (). Dacă încercați să compilați programul, rețineți că programul nu va compila, oferind un mesaj de eroare.

Problema specificatorului protejat apare atunci când membrii clasei derivate (moștenite) trebuie să acceseze membrii clasei de bază (părinte).

Clasa derivată publică cu membrii publici
Luați în considerare următorul program:

#include
folosind spațiul de nume std;
clasa TheCla

public:
int num1 = 10;
protejat:
int num2 = 20;
privat:
int num3 = 30;
;
clasa ChildCla: public TheCla

public:
int metoda1 ()

return num1;

metoda int2 ()

returnează num2;

/ * metoda int3 ()

retur num3;
* /
;
int main ()

ChildCla childObj;
int no1 = childObj.metoda1 ();
cout<int no2 = childObj.metoda2 ();
cout<retur 0;

Ieșirea este:
10
20

În clasa de bază, num1 este public, num2 este protejat și num3 este privat. În clasa derivată, toate funcțiile membre sunt publice. Prima funcție, method1 (), accesează membrul de date publice, num1. A doua funcție, method2 (), accesează membrul de date protejat, num2. A treia funcție, method3 (), deși comentată în prezent, ar trebui să acceseze membrul de date private, num3.

O clasă derivată nu este declarată fără un specificator de acces (public, protejat sau privat). Mai sus, clasa derivată este declarată cu specificatorul public, adică:

clasa ChildCla: public TheCla

Acum, necomentați definiția funcției de membru al treilea din clasa derivată. Dacă încercați să compilați programul, rețineți că acesta nu se va compila, oferind un mesaj de eroare.

Notă: Când întreaga clasă derivată este declarată publică, membrii acesteia nu pot accesa membrii privați ai clasei de bază. Membrii săi pot, totuși, accesa publicul și membrii protejați ai clasei de bază. Programul de mai sus ilustrează acest lucru.

Cu toate acestea, rețineți că un membru public al clasei derivate din public poate accesa un membru protejat al clasei de bază.

Specificatori de clase derivate și specificații de membri

Clasa derivată protejată cu membri publici
Înlocuiți specificatorul „public” cu „protejat” în declarația clasei derivate de mai sus, după cum urmează:

clasa ChildCla: protejată TheCla

Compilați și rulați programul și rețineți că rezultatul este același ca înainte.

Deci, atunci când întreaga clasă derivată este declarată protejată, membrii săi nu pot accesa membrii privați ai clasei de bază. Membrii săi pot, totuși, accesa publicul și membrii protejați ai clasei de bază. Acest lucru este la fel ca atunci când clasa derivată este declarată publică.

Notă: un membru protejat al clasei derivate publice poate accesa un membru protejat al clasei de bază.

Clasa derivată privată cu membri publici
Înlocuiți specificatorul „protejat” cu „privat” în declarația clasei derivate de mai sus, după cum urmează:

clasa ChildCla: privat TheCla

Compilați și rulați programul și rețineți că rezultatul este același ca înainte.

Deci, atunci când întreaga clasă derivată este declarată privată, membrii acesteia nu pot accesa membrii privați ai clasei de bază. Membrii săi pot, totuși, accesa publicul și membrii protejați ai clasei de bază. Acest lucru este la fel ca atunci când clasa derivată este declarată protejată sau publică.

Clasa publică derivată cu membri protejați
Tastați, compilați și rulați următorul program, în care întreaga clasă derivată este protejată, iar membrii săi sunt, de asemenea, protejați. Unele segmente de cod sunt după cum urmează:

#include
folosind spațiul de nume std;
clasa TheCla

public:
int num1 = 10;
protejat:
int num2 = 20;
privat:
int num3 = 30;
;
clasa ChildCla: public TheCla

protejat:
int metoda1 ()

return num1;

metoda int2 ()

returnează num2;

/ * metoda int3 ()

retur num3;
* /
;
int main ()

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

Programul funcționează așa cum este. Nu există nicio ieșire și nu ar trebui să existe nicio ieșire, pe baza modului în care a fost tastat programul.

Acum, nu comentați definiția funcției, method3 (), în clasa derivată. Dacă încercați să compilați programul, rețineți că acesta nu se va compila, oferind un mesaj de eroare. Aceasta înseamnă că un membru privat nu poate fi accesat dintr-o funcție externă, un operator extern sau o clasă derivată. Aceasta este aceeași concluzie care sa încheiat mai sus, referitoare la accesul la un membru privat.

Notă: un membru protejat al clasei derivate protejate poate accesa un membru protejat al clasei de bază.

Acum, puneți comentariile înapoi în clasa derivată și anulați comentariile primului segment de cod din funcția main (). Dacă încercați să compilați programul, rețineți că programul nu va compila din cauza primului segment de cod din funcția main (). Acest efect nu este nou. În afară de clasa derivată, funcțiile externe și operatorii externi, membrii protejați și privați ai unei clase (de bază sau derivate) sunt din același specificator, privat. Funcția main () vede membrul protejat al oricărei clase, indiferent dacă este de bază sau derivat, din același specificator, privat și este interzis accesul la acesta.

Dacă al doilea segment de cod al funcției main () este necomentat, se va aplica aceeași explicație. Adică, funcția main () nu va putea accesa un membru protejat sau privat al clasei derivate sau al clasei de bază. Acest lucru este independent dacă un membru protejat al clasei derivate ar putea accesa un membru protejat al clasei de bază.

Clasa derivată protejată cu membrii protejați
Înlocuiți specificatorul „public” cu „protejat” în declarația clasei derivate de mai sus, după cum urmează:

clasa ChildCla: protejat TheCla

Puneți comentariul segmentelor de cod înapoi în funcția main (), dacă acest lucru nu a fost deja făcut. Compilați și rulați programul și rețineți că rezultatul este ca înainte.

Clasa derivată privată cu membri protejați
Înlocuiți specificatorul „protejat” cu „privat” în declarația clasei derivate de mai sus, după cum urmează:

clasa ChildCla: TheCla privat

Compilați și rulați programul și rețineți că rezultatul va fi ca înainte.

Clasa publică derivată cu membrii privați
Înlocuiți specificatorul „privat” cu „public” în declarația clasei derivate de mai sus, după cum urmează:

clasa ChildCla: public TheCla

Faceți membrii clasei derivate private. Compilați și rulați programul. Rezultatul nu este diferit de cazul „Clasa publică derivată cu membri protejați”.

Clasa derivată protejată cu membrii privați
Înlocuiți specificatorul „public” cu „protejat” în declarația clasei derivate de mai sus, după cum urmează:

clasa ChildCla: protejat TheCla

Compilați și rulați programul. Acest rezultat nu diferă de cazul „Clasa derivată protejată cu membrii protejați”.

Clasa derivată privată cu membrii privați
Înlocuiți specificatorul „protejat” cu „privat” în declarația clasei derivate de mai sus, după cum urmează:

clasa ChildCla: privat TheCla

Compilați și rulați programul. Acest rezultat nu diferă de cazul „Clasa derivată privată cu membri protejați”.

Concluzie

Specificatorii de acces C ++ sunt cuvintele „privat”, „protejat” și „public”.”Ei decid accesul membrilor unei clase. Regiunea unui specificator de acces începe de la eticheta sa, până la sfârșitul descrierii clasei (definiție) sau la începutul unui alt specificator de acces. Orice membru al unei clase poate accesa orice alt membru al aceleiași clase. Un membru privat al unei clase nu poate fi accesat de nicio funcție externă, niciun operator extern sau o clasă derivată.

Membrul clasei de bază trebuie protejat astfel încât un membru privat al clasei de bază să poată fi accesat de un membru al clasei derivate. Acest membru protejat al clasei de bază este văzut ca membru privat al clasei de bază de o funcție externă sau de un operator extern.

Un membru public al unei clase poate fi accesat de orice funcție externă, orice operator extern sau o clasă derivată.

În absența oricărui specificator de acces într-o clasă, se presupune specificatorul privat. Adică, specificatorul de acces implicit este privat.

Referințe utilizate în această lucrare

  • Alireza Ebrahimi, MOȘTENIREA: REUSABILITATE ȘI EXTENDABILITATE
  • S. Malik, Structuri de date folosind C ++ Ediția a II-a
How to change Mouse pointer and cursor size, color & scheme on Windows 10
The mouse pointer and cursor in Windows 10 are very important aspects of the operating system. This can be said for other operating systems as well, s...
Motoare de jocuri gratuite și open source pentru dezvoltarea jocurilor Linux
Acest articol va acoperi o listă de motoare de jocuri gratuite și open source care pot fi utilizate pentru dezvoltarea jocurilor 2D și 3D pe Linux. Ex...
Tutorial Shadow of the Tomb Raider pentru Linux
Shadow of the Tomb Raider este a douăsprezecea completare a seriei Tomb Raider - o franciză de jocuri de acțiune-aventură creată de Eidos Montreal. Jo...