Specifikatorji dostopa C ++

C Access Specifiers



V C ++ je razred niz spremenljivk in funkcij, ki so bile konfigurirane tako, da delujejo skupaj. Ko spremenljivke razreda dobijo vrednosti, se dobi objekt. Objekt ima enake spremenljivke in deluje kot razred, vendar imajo tokrat spremenljivke vrednosti. Iz enega razreda je mogoče ustvariti veliko predmetov. En predmet se od drugega predmeta razlikuje po različnih nizih vrednosti, dodeljenih spremenljivkam drugega predmeta. Ustvarjanje predmeta iz razreda naj bi pomenilo nastanek predmeta. Tudi če imata dva različna predmeta enake vrednosti za svoje spremenljivke, sta ti predmeti različni entiteti, ki sta v programu označeni z različnimi imeni. Spremenljivke za predmet in njegov ustrezni razred se imenujejo podatkovni člani. Funkcije predmeta in ustreznega razreda se imenujejo funkcije člana. Podatkovni člani in članske funkcije se imenujejo člani.

Beseda dostop pomeni branje ali spreminjanje vrednosti spremenljivke, pomeni pa tudi uporabo funkcije. Specifikatorji dostopa C ++ so besede, zasebne, zaščitene in javne. Odločajo se, ali lahko član dostopa do drugih članov svojega razreda, ali pa lahko funkcija ali operater zunaj razreda, ki ne pripada razredu, dostopa do katerega koli člana razreda. Odločajo se tudi, ali lahko član izpeljanega (podrejenega) razreda dostopa do člana nadrejenega razreda.







Za razumevanje tega članka in preizkus kode je potrebno osnovno znanje jezika C ++.



Vsebina članka

Javni in zasebni specifikatorji

Razred
Vsak član razreda lahko dostopa do katerega koli drugega člana istega razreda, ne glede na to, ali je označen kot javni ali zasebni. Razmislite o naslednjem programu:



#vključi
z uporabo imenski prostorure;

razredTheCla
{
zasebno:
intštevilka 1;
intštevilka 2;
javno:
TheCla(intn1,intn2)
{
številka 1=n1;številka 2=n2;
}
intmetoda()
{
vrnitevštevilka 1;
}
};

intglavni()
{
TheCla obj(10,dvajset);
intšt.2=obj.metoda();
stroški<<št.2<<' n';

// 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 () konstruktorska funkcija, ki inicializira spremenljivke, ki nas zanimajo. Področje podajalnika dostopa se začne od njegove oznake do konca opisa razreda (definicije) ali do začetka drugega podajalnika dostopa.





V funkciji main () je prvi stavek instanciranje, ki vključuje konstruktorsko funkcijo, ki inicializira num1 in num2. Naslednji stavek kliče javnega člana, method (), razreda.

Zdaj v opisu razreda (definiciji) funkcija javnih članov TheCla () dostopa do zasebnih članov, num1 in num2. Prav tako funkcija javnega člana, method () dostopa do zasebnega člana, num1. Vsak član v opisu razreda lahko dostopa do katerega koli drugega člana v istem opisu razreda; ni važno, kateri član je zaseben ali javni.



Vendar pa lahko funkcija ali operator, ki ni deklariran v opisu razreda in zunaj opisa razreda, dostopa samo do javnih članov razreda. Funkcija main () je na primer funkcija, deklarirana zunaj opisa razreda. Dostopal je samo do javnih članov method () in TheCla (). Znotraj funkcije main () je funkcija TheCla () obj (10, 20).

Zunanja funkcija ali zunanji operater, na primer funkcija main (), ne moreta dostopati do nobenega zasebnega člana razreda, na primer num1 ali num2. Odstranite indikator komentarja // iz zadnje izjave v main (). Če poskušate prevesti program, upoštevajte, da se program ne bo prevedel, kar bo prikazalo sporočilo o napaki.

Privzeti specifikator
Privzeti podajalnik za razred je zaseben. Torej je zgornji opis razreda enak naslednjemu opisu, zaseben, vendar brez podajalnika:

razredTheCla
{
intštevilka 1;
intštevilka 2;
javno:
TheCla(intn1,intn2)
{
številka 1=n1;številka 2=n2;
}
intmetoda()
{
vrnitevštevilka 1;
}
};

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

Zaščiteni specifikator

V opisu razreda in iz zunanje funkcije ali zunanjega operaterja je zaščiteni specifikator enak zasebnemu specifikatorju. Zdaj zamenjajte zasebnega podajalnika 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, kar bo prikazalo sporočilo o napaki.

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

Javno izveden razred z javnimi člani
Razmislite o naslednjem programu:

#vključi
z uporabo imenski prostorure;

razredTheCla
{
javno:
intštevilka 1= 10;
zaščiteno:
intštevilka 2= dvajset;
zasebno:
intštevilka 3= 30;
};

razredChildCla: javnoTheCla
{
javno:
intmetoda 1()
{
vrnitevštevilka 1;
}
intmetoda 2()
{
vrnitevštevilka 2;
}
/*int metoda3 ()
{
povratna številka 3;
} * /

};

intglavni()
{
ChildCla otrokObj;
intšt.1=otrokObj.metoda 1();
stroški<<št.1<<' n';

intšt.2=otrokObj.metoda 2();
stroški<<št.2<<' n';

vrnitev 0;
}

Izhod je:
10
dvajset

V osnovnem razredu je številka 1 javna, številka 2 zaščitena in številka 3 zasebna. V izpeljanem razredu so vse članske funkcije javne. Prva funkcija, method1 (), dostopa do člana javnih podatkov, num1. Druga funkcija, method2 (), dostopa do zaščitenega podatkovnega člana, num2. Tretja funkcija, method3 (), čeprav je trenutno komentirana, bi morala dostopati do člana zasebnih podatkov, num3.

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

razredChildCla: javnoTheCla{}

Zdaj odstranite komentar iz definicije tretje funkcije č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. Njegovi člani pa lahko dostopajo do javnih in zaščitenih članov osnovnega razreda. Zgornji program to ponazarja.

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

Izpeljani specifikatorji razredov in specifikatorji članov

Zaščiteni izpeljani razred z javnimi člani
V zgornji deklaraciji izpeljanega razreda javni specifikator zamenjajte z zaščiteno:

razredChildCla: zaščitenoTheCla{}

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

Ko je torej celoten izpeljani razred razglašen za zaščitenega, njegovi člani ne morejo dostopati do zasebnih članov osnovnega razreda. Njegovi člani pa lahko dostopajo do javnih in zaščitenih članov osnovnega razreda. To je enako, ko je izpeljani razred razglašen za javnega.

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ščiteni specifikator z zasebnim:

razredChildCla: zasebnoTheCla{}

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

Ko je torej celoten izpeljani razred razglašen za zasebnega, njegovi člani ne morejo dostopati do zasebnih članov osnovnega razreda. Njegovi člani pa lahko dostopajo do javnih in zaščitenih članov osnovnega razreda. To je enako, ko je izpeljani razred razglašen za zaščitenega ali javnega.

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

#vključi
z uporabo imenski prostorure;

razredTheCla
{
javno:
intštevilka 1= 10;
zaščiteno:
intštevilka 2= dvajset;
zasebno:
intštevilka 3= 30;
};

razredChildCla: javnoTheCla
{
zaščiteno:
intmetoda 1()
{
vrnitevštevilka 1;
}
intmetoda 2()
{
vrnitevštevilka 2;
}
/*int metoda3 ()
{
povratna številka 3;
} * /

};

intglavni()
{
/*ChildCla childObj;
int no1 = childObj.method1 ();
stroški<
/*int št.2 = childObj.method2 ();
stroški<
vrnitev 0;
}

Program deluje tako kot je. Na podlagi načina vnosa programa ni izhoda in tudi naj ne bi bilo.

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 do zasebnega člana ni mogoče dostopati iz zunanje funkcije, zunanjega operaterja ali izpeljanega razreda. To je enak zaključek, 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 vrnite komentarje nazaj v izpeljani razred in odstranite komentar iz 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. Razen izpeljanega razreda, zunanjih funkcij in zunanjih operaterjev so zaščiteni in zasebni člani (osnovnega ali izpeljanega) razreda istega specifikatorja, zasebni. Funkcija main () vidi zaščitenega člana katerega koli razreda, ne glede na to, ali je izpeljan, istega specifikatorja, zasebnega in do njega ni dovoljen dostop.

Če drugi kodni segment funkcije main () ni komentiran, 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 ni odvisno od tega, ali bi zaščiteni član izpeljanega razreda lahko dostopal do zaščitenega člana osnovnega razreda.

Zaščiteni izpeljani razred z zaščitenimi člani
V zgornji deklaraciji izpeljanega razreda javni specifikator zamenjajte z zaščiteno:

razredChildCla: zaščitenoTheCla{}

Komentar segmentov kode vrnite nazaj v funkcijo main (), če tega še niste storili. Sestavite in zaženite program in upoštevajte, da je rezultat kot prej.

Zasebni izpeljani razred z zaščitenimi člani
V zgornji deklaraciji izpeljanega razreda zamenjajte zaščiteni specifikator z zasebnim:

razredChildCla: zasebnoTheCla

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

Javni izpeljani razred z zasebnimi člani
V zgornji deklaraciji izpeljanega razreda zasebni specifikator zamenjajte z javnim:

razredChildCla: javnoTheCla{}

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

Zaščiteni izpeljani razred z zasebnimi člani
V zgornji deklaraciji izpeljanega razreda javni specifikator zamenjajte z zaščiteno:

razredChildCla: zaščitenoTheCla{}

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

Zasebni izpeljani razred z zasebnimi člani
V zgornji deklaraciji izpeljanega razreda zamenjajte zaščiteni specifikator z zasebnim:

razredChildCla: zasebnoTheCla{}

Prevedite in zaženite program. Ta rezultat se ne razlikuje od primera Private Derived Class with Protected Members.

Zaključek

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

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

Do javnega člana razreda lahko dostopate s katero koli zunanjo funkcijo, katerim koli zunanjim operaterjem ali izpeljanim razredom.

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

Reference, uporabljene v tem delu