C ++

Določevalniki dostopa C ++

Določevalniki dostopa C ++
V C ++ je razred nabor spremenljivk in funkcij, ki so bile konfigurirane za skupno delo. Ko spremenljivke razreda dobijo vrednosti, dobimo objekt. Objekt ima enake spremenljivke in funkcije kot razred, toda tokrat imajo spremenljivke vrednosti. Iz enega razreda je mogoče ustvariti veliko predmetov. En objekt se razlikuje od drugega glede na različen nabor vrednosti, ki so dodeljene spremenljivkam drugega predmeta. Ustvarjanje predmeta iz razreda naj bi ustvarilo primerek predmeta. Tudi če imata dva različna predmeta enake vrednosti za svoje spremenljivke, sta ta predmeta različna entiteta, ki sta v programu označena z različnimi imeni. Spremenljivke za objekt in njegov ustrezni razred se imenujejo podatkovni člani. Funkcije predmeta in ustreznega razreda se imenujejo članske funkcije. Podatkovni člani in funkcije članov se imenujejo člani.

Beseda dostop pomeni branje ali spreminjanje vrednosti spremenljivke in pomeni tudi uporabo funkcije. Specifikatorji dostopa za C ++ so besede "zasebno", "zaščiteno" in "javno"."Določijo, ali lahko član dostopa do drugih članov svojega razreda ali funkcija ali operater zunaj razreda, ki ne pripada razredu, lahko dostopa do katerega koli člana razreda. Odločijo tudi, ali lahko član izpeljanega (podrejenega) razreda dostopa do člana nadrejenega razreda.

Za razumevanje tega članka in preizkušanje priložene kode je potrebno osnovno znanje jezika C ++.

Vsebina članka

Javne in zasebne specifikacije

Razred
Vsak član razreda lahko dostopa do katerega koli drugega člana tega razreda, neodvisen od tega je označen kot "javni" ali "zasebni".”Upoštevajte naslednji program:

#include
uporaba imenskega prostora std;
razred TheCla

zasebno:
int num1;
int num2;
javno:
TheCla (int n1, int n2)

num1 = n1; število2 = n2;

metoda int ()

vrnitev num1;

;
int main ()

TheCla obj (10, 20);
int št2 = obj.metoda ();
cout<// int no1 = obj.num1;
vrnitev 0;

Izhod je 10. Zasebna člana sta num1 in num2. Javna člana sta TheCla () in method (). Upoštevajte, da je TheCla () funkcija konstruktorja, ki inicializira spremenljivke, ki nas zanimajo. Območje specifikatorja dostopa se začne od njegove nalepke do konca opisa razreda (definicije) ali do začetka drugega specifikatorja dostopa.

V funkciji main () je prvi stavek primerek, ki vključuje konstruktorsko funkcijo, ki inicializira num1 in num2. Naslednja izjava pokliče javnega člana, metodo (), razreda.

Zdaj v opisu razreda (definiciji) funkcija javnega člana TheCla () dostopa do zasebnih članov, num1 in num2. Tudi funkcija javnega člana, metoda (), dostopa do zasebnega člana, številka1. Vsak član znotraj opisa razreda lahko dostopa do katerega koli drugega člana v istem opisu razreda; ni pomembno, kateri član je zasebni ali javni.

Vendar pa lahko funkcija ali operator, ki ni deklariran v opisu razreda in zunaj njega, dostopa samo do javnih članov razreda. Funkcija main () je na primer funkcija, navedena zunaj opisa razreda. Dostop je imel le do članov metode () in TheCla (). Znotraj glavne () funkcije je funkcija TheCla () obj (10, 20).

Zunanja funkcija ali zunanji operator, kot je glavna (), ne more dostopati do nobenega zasebnega člana razreda, na primer num1 ali num2. Odstranite indikator komentarja // iz zadnjega stavka v main (). Če poskušate prevesti program, upoštevajte, da se program ne bo prevedel in bo poslal sporočilo o napaki.

Privzeti specifikator
Privzeti specifikator za razred je »private."Torej, zgornji opis razreda je enak naslednjemu opisu, zaseben, vendar brez specifikatorja:

razred TheCla

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

num1 = n1; število2 = n2;

metoda int ()

vrnitev num1;

;

Opomba: oznaka specifikatorja dostopa se začne s specifikatorjem, nato pa ji sledi dvopičje.

Zaščiteni specifikator

Znotraj opisa razreda in zunanje funkcije ali zunanjega operaterja je zaščiteni specifikator enak zasebnemu. Zdaj nadomestite zasebni specifikator v zgornjem programu s specifikatorjem, zaščitite in odstranite indikator komentarja // iz zadnjega stavka v funkciji main (). Če poskušate prevesti program, upoštevajte, da se program ne bo prevedel in bo poslal sporočilo o napaki.

Težava zaščitenega specifikatorja se pojavi, ko morajo člani izpeljanega (podedovanega) razreda dostopati do članov osnovnega (nadrejenega) razreda.

Javni izpeljani razred z javnimi člani
Upoštevajte naslednji program:

#include
uporaba imenskega prostora std;
razred TheCla

javno:
int num1 = 10;
zaščiteno:
int num2 = 20;
zasebno:
int num3 = 30;
;
razred ChildCla: javni TheCla

javno:
int method1 ()

vrnitev num1;

int method2 ()

vrnitev num2;

/ * int method3 ()

vrnitev num3;
* /
;
int main ()

ChildCla childObj;
int št1 = otrokObj.metoda1 ();
cout<int št2 = otrokObj.metoda2 ();
cout<vrnitev 0;

Rezultat je:
10
20

V osnovnem razredu je num1 javen, num2 zaščiten in num3 zaseben. V izvedenem razredu so vse funkcije člana javne. Prva funkcija, method1 (), dostopa do člana z javnimi podatki, številka1. Druga funkcija, method2 (), dostopa do zaščitenega podatkovnega člana, num2. Tretja funkcija, method3 (), čeprav trenutno komentirana, bi morala dostopati do člana z zasebnimi podatki, num3.

Izpeljani razred ni prijavljen brez specifikatorja dostopa (javni, zaščiteni ali zasebni). Zgoraj je izpeljani razred prijavljen z javnim specifikatorjem, to je:

razred ChildCla: javni TheCla

Zdaj odstranite komentar iz definicije funkcije tretjega člana v izpeljanem razredu. Če poskušate prevesti program, upoštevajte, da se ne bo prevedel, s sporočilom o napaki.

Opomba: Ko je celoten izpeljani razred razglašen za javnega, njegovi člani ne morejo dostopati do zasebnih članov osnovnega razreda. Njeni člani pa lahko dostopajo do javnosti in zaščitenih članov osnovnega razreda. Zgornji program to ponazarja.

Upoštevajte pa, da lahko javni član javnega izpeljanega razreda dostopa do zaščitenega člana osnovnega razreda.

Izpeljani specifikatorji razredov in člani

Zaščiten izpeljani razred z javnimi člani
V zgornji izjavi izpeljanega razreda nadomestite "javni" specifikator z "zaščiten", kot sledi:

razred ChildCla: zaščiten TheCla

Sestavite in zaženite program in upoštevajte, da je rezultat enak kot prej.

Ko je torej celoten izpeljani razred razglašen za zaščiten, njegovi člani ne morejo dostopati do zasebnih članov osnovnega razreda. Njeni člani pa lahko dostopajo do javnosti in zaščitenih članov osnovnega razreda. To je enako kot takrat, ko je izvedeni razred razglašen za javni.

Opomba: zaščiteni član javnega izpeljanega razreda lahko dostopa do zaščitenega člana osnovnega razreda.

Zasebni izpeljani razred z javnimi člani
V zgornji deklaraciji izpeljanega razreda zamenjajte "zaščiten" specifikator z "private", kot sledi:

razred ChildCla: zasebno TheCla

Sestavite in zaženite program in upoštevajte, da je rezultat enak kot prej.

Torej, ko je celoten izpeljani razred razglašen za zasebnega, njegovi člani ne morejo dostopati do zasebnih članov osnovnega razreda. Njeni člani pa lahko dostopajo do javnosti in zaščitenih članov osnovnega razreda. To je enako kot takrat, ko je izpeljani razred razglašen za zaščiten ali javen.

Javni izpeljani razred z zaščitenimi člani
Vnesite, prevedite in zaženite naslednji program, v katerem je zaščiten celoten izpeljani razred in njegovi člani. Nekateri segmenti kode so naslednji:

#include
uporaba imenskega prostora std;
razred TheCla

javno:
int num1 = 10;
zaščiteno:
int num2 = 20;
zasebno:
int num3 = 30;
;
razred ChildCla: javni TheCla

zaščiteno:
int method1 ()

vrnitev num1;

int method2 ()

vrnitev num2;

/ * int method3 ()

vrnitev num3;
* /
;
int main ()

/ * ChildCla childObj;
int št1 = otrokObj.metoda1 ();
cout</ * int no2 = otrokObj.metoda2 ();
cout<vrnitev 0;

Program deluje tako kot je. Izhoda ni in naj ne bi izhajal glede na to, kako je bil program vtipkan.

Zdaj odstranite komentar iz definicije funkcije, method3 (), v izpeljanem razredu. Če poskušate prevesti program, upoštevajte, da se ne bo prevedel, s sporočilom o napaki. To pomeni, da zasebnega člana ni mogoče dostopati iz zunanje funkcije, zunanjega operaterja ali izpeljanega razreda. To je isti sklep, kot je bil sklenjen zgoraj, glede dostopa do zasebnega člana.

Opomba: zaščiteni član zaščitenega izvedenega razreda lahko dostopa do zaščitenega člana osnovnega razreda.

Zdaj dajte komentarje nazaj v izpeljani razred in odstranite komentar prvega segmenta kode v funkciji main (). Če poskušate prevesti program, upoštevajte, da se program ne bo prevedel zaradi prvega segmenta kode v funkciji main (). Ta učinek ni nov. Poleg izpeljanega razreda, zunanjih funkcij in zunanjih operaterjev so zaščiteni in zasebni člani (osnovnega ali izpeljanega) razreda istega specifikatorja, private. Funkcija main () vidi zaščitenega člana katerega koli razreda, bodisi osnovnega bodisi izpeljanega, istega specifikatorja, zasebnega in mu je prepovedan dostop.

Če je drugi kodni segment funkcije main () brez komentarja, bo veljala ista razlaga. To pomeni, da funkcija main () ne bo mogla dostopati do zaščitenega ali zasebnega člana izpeljanega razreda ali osnovnega razreda. To je neodvisno od tega, ali bi zaščiteni član izpeljanega razreda lahko dostopal do zaščitenega člana osnovnega razreda.

Zaščiten izpeljani razred z zaščitenimi člani
V zgornji izjavi izpeljanega razreda nadomestite "javni" specifikator z "zaščiten", kot sledi:

razred ChildCla: zaščiten TheCla

Komentar segmentov kode postavite nazaj v funkcijo main (), če to še ni bilo storjeno. Sestavite in zaženite program in upoštevajte, da je rezultat takšen kot prej.

Zasebni izpeljani razred z zaščitenimi člani
V zgornji deklaraciji izpeljanega razreda zamenjajte "zaščiten" specifikator z "private", kot sledi:

razred ChildCla: zasebno TheCla

Sestavite in zaženite program in upoštevajte, da bo rezultat takšen kot prej.

Javni izpeljani razred z zasebnimi člani
V zgornji izjavi izpeljanega razreda zamenjajte "private" specifikator z "public", kot sledi:

razred ChildCla: javni TheCla

Člani izpeljanega razreda naj bodo zasebni. Sestavite in zaženite program. Rezultat se ne razlikuje od primera "Javni izpeljani razred z zaščitenimi člani".

Zaščiten izpeljani razred z zasebnimi člani
V zgornji izjavi izpeljanega razreda nadomestite "javni" specifikator z "zaščiten", kot sledi:

razred ChildCla: zaščiten TheCla

Sestavite in zaženite program. Ta rezultat se ne razlikuje od primera "Zaščiten izpeljani razred z zaščitenimi člani".

Zasebni izpeljani razred z zasebnimi člani
V zgornji izjavi izpeljanega razreda zamenjajte specifikator "zaščiteno" z "zasebno", kot sledi:

razred ChildCla: zasebno TheCla

Sestavite in zaženite program. Ta rezultat se ne razlikuje od primera »Zasebni izvedeni razred z zaščitenimi člani«.

Zaključek

Specifikatorji dostopa za C ++ so besede "zasebno", "zaščiteno" in "javno".”Odločajo o dostopu za člane razreda. Območje specifikatorja dostopa se začne od njegove oznake, do konca opisa razreda (definicije) ali do začetka drugega specifikatorja dostopa. Vsak član razreda lahko dostopa do katerega koli drugega člana tega razreda. Do zasebnega člana razreda ne more dostopati nobena zunanja funkcija, noben zunanji operator ali izpeljani razred.

Član osnovnega razreda mora biti zaščiten, da lahko član izpeljanega razreda dostopa do zasebnega člana osnovnega razreda. Ta zaščiteni član osnovnega razreda zunanja funkcija ali zunanji operater vidi kot zasebnega člana osnovnega razreda.

Do javnega člana razreda lahko dostopa katera koli zunanja funkcija, kateri koli zunanji operater ali izpeljani razred.

Če v razredu ni nobenega specifikatorja dostopa, je predpostavljen zasebni specifikator. To pomeni, da je privzeti specifikator dostopa zaseben.

Reference, uporabljene v tem delu

  • Alireza Ebrahimi, DEDIŠČINA: PONOVNA UPORABNOST IN RAZŠIRITEV
  • S. Malik, Podatkovne strukture z uporabo C ++ 2. izdaja
Kako povečati FPS v Linuxu?
FPS pomeni Število sličic na sekundo. Naloga FPS je merjenje hitrosti sličic pri predvajanju video posnetkov ali igranih predstavah. Z enostavnimi bes...
Najboljše laboratorijske igre Oculus App
Če ste lastnik slušalk Oculus, morate biti seznanjeni s stranskim nalaganjem. Sideloading je postopek namestitve vsebine, ki ni shranjena v slušalke. ...
10 najboljših iger za igranje v Ubuntuju
Platforma Windows je bila ena izmed prevladujočih platform za igre na srečo zaradi velikega odstotka iger, ki se danes razvijajo za naravno podporo si...