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
- Zaščiteni specifikator
- Izpeljani specifikatorji razredov in člani
- Zaključek
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:
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<
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:
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:
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<
cout<
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 TheClaZdaj 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:
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:
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:
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<
cout<
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:
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:
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:
Č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:
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:
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