C ++ juurdepääsu täpsustajad

C Access Specifiers



C ++ puhul on klass muutujate ja funktsioonide kogum, mis on konfigureeritud koos töötama. Kui klassi muutujatele on antud väärtused, saadakse objekt. Objektil on samad muutujad ja funktsioonid nagu klassil, kuid seekord on muutujatel väärtused. Ühest klassist saab luua palju objekte. Üks objekt erineb teisest objektist vastavalt teise objekti muutujatele määratud erinevate väärtuste kogumile. Klassist objekti loomine tähendab objekti initsieerimist. Isegi kui kahel erineval objektil on nende muutujate jaoks samad väärtused, on need objektid erinevad üksused, mis on programmis identifitseeritud erinevate nimedega. Objekti ja sellele vastava klassi muutujaid nimetatakse andmeliikmeteks. Objekti ja sellele vastava klassi funktsioone nimetatakse liikmefunktsioonideks. Andmeliikmeid ja liikmefunktsioone nimetatakse liikmeteks.

Sõna juurdepääs tähendab muutuja väärtuse lugemist või muutmist ning see tähendab ka funktsiooni kasutamist. C ++ juurdepääsu täpsustajad on sõnad privaatne, kaitstud ja avalik. Nad otsustavad, kas liige pääseb juurde teistele oma klassi liikmetele või kas klassiväline funktsioon või operaator, kes ei kuulu klassi, pääseb juurde mis tahes klassi liikmele. Samuti otsustavad nad, kas tuletatud (laps) klassi liikmel on juurdepääs vanemklassi liikmele.







Selle artikli mõistmiseks ja antud koodi testimiseks on vaja C ++ põhiteadmisi.



Artikli sisu

Avalikud ja privaatsed täpsustajad

Klass
Iga klassi liige pääseb juurde sama klassi teistele liikmetele, sõltumata sellest, kas see on avalik või privaatne. Mõelge järgmisele programmile:



#kaasake
kasutades nimeruumtundi;

klassiTheCla
{
privaatne:
intnum1;
intnum2;
avalik:
TheCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intmeetod()
{
tagasinum1;
}
};

intpeamine()
{
TheCla obj(10,kakskümmend);
intnr2=obj.meetod();
maksma<<nr2<<' n';

// int nr1 = obj.num1;

tagasi 0;
}

Väljund on 10. Eraliikmed on num1 ja num2. Avalikud liikmed on TheCla () ja meetod (). Pange tähele, et TheCla () on konstruktorifunktsioon, mis lähtestab huvipakkuvad muutujad. Juurdepääsu spetsifikatsiooni piirkond algab selle sildist kuni klassikirjelduse (määratluse) lõpuni või mõne muu juurdepääsu spetsifikaadi alguseni.





Funktsioonis main () on esimene lause konstrueerimisfunktsiooni sisaldav instants, mis initsialiseerib num1 ja num2. Järgmine avaldus kutsub klassi avalikku liiget, meetodit ().

Nüüd pääseb klassi kirjelduses (määratluses) avaliku liikme funktsioon TheCla () juurde privaatliikmetele num1 ja num2. Samuti pääseb avaliku liikme funktsioon, meetod () juurde privaatliikmele num1. Kõik klassikirjelduse liikmed saavad juurdepääsu sama klassi kirjelduse teistele liikmetele; vahet pole, kumb liige on era- või avalik.



Funktsioon või operaator, mida pole klassikirjelduses ja väljaspool klassikirjeldust deklareeritud, pääseb aga ligi ainult klassi avalikele liikmetele. Põhifunktsioon () on näiteks väljaspool klassi kirjeldust deklareeritud funktsioon. See on saanud juurdepääsu ainult meetodile () ja TheCla () avalikele liikmetele. Põhifunktsiooni () sees on funktsioon TheCla () obj (10, 20).

Väline funktsioon või väline operaator, näiteks põhifunktsioon (), ei saa juurdepääsu ühelegi klassi privaatsest liikmest, näiteks num1 või num2. Eemaldage kommentaari indikaator // põhi () viimasest väitest. Kui proovite programmi kompileerida, pange tähele, et programm ei kompileeri, andes veateate.

Vaikimisi täpsustaja
Klassi vaikespetsifikaator on privaatne. Seega on ülaltoodud klassi kirjeldus sama, mis järgmine kirjeldus, privaatne, kuid ilma spetsifikaadita:

klassiTheCla
{
intnum1;
intnum2;
avalik:
TheCla(intn1,intn2)
{
num1=n1;num2=n2;
}
intmeetod()
{
tagasinum1;
}
};

Märge : juurdepääsu spetsifikatsiooni silt algab spetsifikaadiga ja sellele järgneb koolon.

Kaitstud täpsustaja

Klassikirjelduses ja välise funktsiooni või välise operaatori puhul on kaitstud spetsifikaat sama, mis privaatne. Nüüd asendage ülaltoodud programmi privaatne spetsifikaat spetsifikatsiooniga, kaitske ja eemaldage kommentaari indikaator // põhifunktsiooni () funktsiooni viimasest-ühest avaldusest. Kui proovite programmi kompileerida, pange tähele, et programm ei kompileeri, andes veateate.

Kaitstud spetsifikatsiooni küsimus kerkib esile siis, kui tuletatud (päritud) klassi liikmed peavad pääsema baasklassi (vanem) liikmetele.

Avalik tuletatud klass avalike liikmetega
Mõelge järgmisele programmile:

#kaasake
kasutades nimeruumtundi;

klassiTheCla
{
avalik:
intnum1= 10;
kaitstud:
intnum2= kakskümmend;
privaatne:
intnum3= 30;
};

klassiChildCla: avalikTheCla
{
avalik:
intmeetod1()
{
tagasinum1;
}
intmeetod2()
{
tagasinum2;
}
/*int meetod3 ()
{
tagasta number 3;
} * /

};

intpeamine()
{
LapsCla lapsObj;
intnr1=lapsObj.meetod1();
maksma<<nr1<<' n';

intnr2=lapsObj.meetod2();
maksma<<nr2<<' n';

tagasi 0;
}

Väljund on:
10
kakskümmend

Põhiklassis on number 1 avalik, number 2 on kaitstud ja number 3 on privaatne. Tuletatud klassis on kõik liikmefunktsioonid avalikud. Esimene funktsioon, meetod1 (), pääseb juurde avalikele andmetele, num1. Teine funktsioon, meetod2 (), pääseb juurde kaitstud andmeliikmele nr2. Kolmas funktsioon, meetod3 (), kuigi seda praegu kommenteeritakse, peaks pääsema juurde privaatsele andmeliikmele nr3.

Tuletatud klassi ei deklareerita ilma juurdepääsuspetsiifita (avalik, kaitstud või privaatne). Eespool on tuletatud klass deklareeritud avaliku spetsifikatsiooniga, see tähendab:

klassiChildCla: avalikTheCla{}

Nüüd tühistage tuletatud klassi kolmanda liikmefunktsiooni definitsioon. Kui proovite programmi kompileerida, pange tähele, et see ei kompileeri, andes veateate.

Märge : Kui kogu tuletatud klass on avalikuks kuulutatud, ei pääse selle liikmed juurde põhiklassi eraliikmetele. Selle liikmed saavad siiski juurdepääsu üldsusele ja kaitstud põhiklassi liikmetele. Ülaltoodud programm illustreerib seda.

Pange siiski tähele, et avaliku tuletatud klassi avalikul liikmel on juurdepääs põhiklassi kaitstud liikmele.

Tuletatud klasside ja liikmete täpsustajad

Kaitstud tuletatud klass koos avalike liikmetega
Asenda avalik spetsifikatsioon ülaltoodud tuletatud klassi deklaratsioonis kaitstud kujul järgmiselt.

klassiChildCla: kaitstudTheCla{}

Koostage ja käivitage programm ning pange tähele, et tulemus on sama mis varem.

Seega, kui kogu tuletatud klass on kaitstud, ei pääse selle liikmed baasklassi eraliikmetele juurde. Selle liikmed saavad siiski juurdepääsu üldsusele ja kaitstud põhiklassi liikmetele. See on sama, kui tuletatud klass avalikuks kuulutada.

Märge : avaliku tuletatud klassi kaitstud liige pääseb juurde põhiklassi kaitstud liikmele.

Eraldi tuletatud klass avalike liikmetega
Asendage ülaltoodud tuletatud klassi deklaratsioonis kaitstud spetsifikatsioon privaatseks järgmiselt.

klassiChildCla: privaatneTheCla{}

Koostage ja käivitage programm ning pange tähele, et tulemus on sama mis varem.

Niisiis, kui kogu tuletatud klass kuulutatakse privaatseks, ei pääse selle liikmed baasklassi eraliikmetele juurde. Selle liikmed saavad siiski juurdepääsu üldsusele ja kaitstud põhiklassi liikmetele. See on sama mis tuletatud klassi kuulutamisel kaitstud või avalikuks.

Avalik tuletatud klass koos kaitstud liikmetega
Tippige, kompileerige ja käivitage järgmine programm, kus kogu tuletatud klass on kaitstud ja ka selle liikmed on kaitstud. Mõned koodisegmendid on järgmised:

#kaasake
kasutades nimeruumtundi;

klassiTheCla
{
avalik:
intnum1= 10;
kaitstud:
intnum2= kakskümmend;
privaatne:
intnum3= 30;
};

klassiChildCla: avalikTheCla
{
kaitstud:
intmeetod1()
{
tagasinum1;
}
intmeetod2()
{
tagasinum2;
}
/*int meetod3 ()
{
tagasta number 3;
} * /

};

intpeamine()
{
/*LapsCla lapsObj;
int nr1 = lapsObj.meetod1 ();
maksma<
/*int nr2 = lapsObj.meetod2 ();
maksma<
tagasi 0;
}

Programm töötab nii, nagu see on. Programmi trükkimise põhjal pole väljundit ega väljundit.

Nüüd tühistage tuletatud klassi funktsiooni definitsiooni meetod3 () kommentaar. Kui proovite programmi kompileerida, pange tähele, et see ei kompileeri, andes veateate. See tähendab, et eraliikmele ei pääse juurde välise funktsiooni, välise operaatori või tuletatud klassi kaudu. See on sama järeldus, mis tehti eespool seoses eraliikme juurdepääsuga.

Märge : kaitstud tuletatud klassi kaitstud liige pääseb juurde põhiklassi kaitstud liikmele.

Nüüd pange kommentaarid tagasi tuletatud klassi ja tühistage peamine () funktsiooni esimene koodisegment. Kui proovite programmi kompileerida, pange tähele, et programm ei kompileeri põhifunktsiooni () esimese koodilõigu tõttu. See efekt pole uus. Lisaks tuletatud klassile, välistele funktsioonidele ja välistele operaatoritele on (põhi- või tuletatud) klassi kaitstud ja privaatsed liikmed sama spetsifikatsiooniga, privaatsed. Funktsioon main () näeb mis tahes klassi kaitstud liiget, olenemata sellest, kas see on baas või tuletatud, sama spetsifikatsiooni järgi, privaatne ja tal on sellele juurdepääs keelatud.

Kui põhifunktsiooni () teise koodisegumi kommentaarid tühistatakse, kehtib sama selgitus. See tähendab, et põhifunktsioonil () puudub juurdepääs tuletatud klassi või põhiklassi kaitstud või privaatsele liikmele. See ei sõltu sellest, kas tuletatud klassi kaitstud liige pääseb juurde põhiklassi kaitstud liikmele.

Kaitstud tuletatud klass koos kaitstud liikmetega
Asenda avalik spetsifikatsioon ülaltoodud tuletatud klassi deklaratsioonis kaitstud kujul järgmiselt.

klassiChildCla: kaitstudTheCla{}

Pange koodisegmentide kommentaar tagasi põhifunktsiooni (), kui seda pole veel tehtud. Koostage ja käivitage programm ning pange tähele, et tulemus on nagu enne.

Eraldi tuletatud klass kaitstud liikmetega
Asendage ülaltoodud tuletatud klassi deklaratsioonis kaitstud spetsifikatsioon privaatseks järgmiselt.

klassiChildCla: privaatneTheCla

Koostage ja käivitage programm ning pange tähele, et tulemus on sama, mis enne.

Avalik tuletatud klass koos eraliikmetega
Asendage privaatne spetsifikatsioon ülaltoodud tuletatud klassi deklaratsioonis avalikuga järgmiselt.

klassiChildCla: avalikTheCla{}

Muutke tuletatud klassi liikmed privaatseks. Kompileerige ja käivitage programm. Tulemus ei erine kaitstud liikmetega avaliku tuletatud klassi juhtumist.

Eraliikmetega kaitstud tuletatud klass
Asenda avalik spetsifikatsioon ülaltoodud tuletatud klassi deklaratsioonis kaitstud kujul järgmiselt.

klassiChildCla: kaitstudTheCla{}

Kompileerige ja käivitage programm. See tulemus ei erine kaitstud liikmetega kaitstud tuletatud klassi juhtumist.

Privaatne tuletatud klass koos eraliikmetega
Asendage ülaltoodud tuletatud klassi deklaratsioonis kaitstud spetsifikatsioon privaatseks järgmiselt.

klassiChildCla: privaatneTheCla{}

Kompileerige ja käivitage programm. See tulemus ei erine kaitstud liikmetega privaattuletatud klassi juhtumist.

Järeldus

C ++ juurdepääsu täpsustajad on sõnad privaatne, kaitstud ja avalik. Nad otsustavad klassi liikmetele juurdepääsu. Juurdepääsupiirangu piirkond algab selle sildist, klassikirjelduse (määratluse) lõpuni või mõne muu juurdepääsu spetsifikatsiooni alguseni. Iga klassi liige pääseb juurde sama klassi teistele liikmetele. Klassi eraliikmele ei pääse juurde ükski väline funktsioon, ükski väline operaator ega tuletatud klass.

Põhiklassi liige peab olema kaitstud, nii et tuletatud klassi liige pääseb juurde põhiklassi eraliikmele. Välisfunktsioon või väline operaator näeb seda põhiklassi kaitstud liiget baasklassi eraliikmena.

Klassi avalikule liikmele pääseb juurde iga välisfunktsioon, mis tahes väline operaator või tuletatud klass.

Kui klassis puudub juurdepääsuspetsiif, eeldatakse privaatset spetsifikatsiooni. See tähendab, et vaikejuurdepääsu spetsifikatsioon on privaatne.

Selles töös kasutatud viited