C ++

C ++ juurdepääsu spetsifikaatorid

C ++ juurdepääsu spetsifikaatorid
Klassis C ++ on klass muutujate ja funktsioonide kogum, mis on konfigureeritud koos töötama. Kui klassi muutujatele antakse väärtused, saadakse objekt. Objektil on samad muutujad ja funktsioonid kui klassil, kuid seekord on muutujatel väärtused. Ühest klassist saab luua palju objekte. Üks objekt erineb teisest objektist teise objekti muutujate jaoks määratud erinevate väärtuste kogumi järgi. Klassist objekti loomine öeldakse, et see kiirendab objekti. Isegi kui kahel erineval objektil on muutujate jaoks samad väärtused, on need objektid erinevad üksused, mida programmis identifitseeritakse erinevate nimedega. Objekti ja sellele vastava klassi muutujaid nimetatakse andmeliikmeteks. Objekti ja sellele vastava klassi funktsioone nimetatakse liikmefunktsioonideks. Andmeliikmeid ja liikmete funktsioone nimetatakse liikmeteks.

Sõna ligipääs tähendab muutuja väärtuse lugemist või muutmist ning ühtlasi ka funktsiooni kasutamist. C ++ juurdepääsu täpsustajad on sõnad "privaatne", "kaitstud" ja "avalik"."Nad otsustavad, kas liige pääseb juurde oma klassi liikmetele või kas funktsioon või operaator, kes asub väljaspool klassi ja ei kuulu klassi, pääseb juurde mis tahes klassi liikmele. Samuti otsustavad nad, kas tuletatud (lapse) klassi liige pääseb juurde vanema klassi liikmele.

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

Artikli sisu

Avalikud ja eraspetsifikaatorid

Klass
Igal klassi liikmel on juurdepääs kõigile teistele sama klassi liikmetele, kellest sõltumata on silt „avalik” või „privaatne”."Mõelge järgmisele programmile:

# kaasata
nimeruumi kasutamine std;
klass TheCla

privaatne:
int num1;
int num2;
avalik:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int meetod ()

tagastama num1;

;
int main ()

TheCla obj (10, 20);
int no2 = obj.meetod ();
cout<// int no1 = obj.num1;
tagastama 0;

Väljund on 10. Privaatliikmed on numbrid1 ja nr2. Avalikud liikmed on TheCla () ja method (). Pange tähele, et TheCla () on konstruktori funktsioon, mis initsialiseerib huvipakkuvad muutujad. Juurdepääsuparameetri piirkond algab selle sildist klassi kirjelduse (definitsiooni) lõpuni või teise juurdepääsuparameetri alguseni.

Funktsioonis main () on esimene lause konstruktori funktsiooni kaasav 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 privaatsetele liikmetele num1 ja num2. Samuti pääseb avaliku liikme funktsioon, meetod () juurde privaatsele liikmele num1. Igal klassi kirjelduse liikmel on juurdepääs teistele sama klassi kirjelduse liikmetele; pole tähtis, milline liige on era- või avalik.

Funktsioonil või operaatoril, mida pole klassi kirjelduses deklareeritud ja väljaspool klassi kirjeldust, on juurdepääs ainult klassi avalikele liikmetele. Näiteks peamine () funktsioon on väljaspool klassi kirjeldust deklareeritud funktsioon. Sellel on olnud juurdepääs ainult meetodile () ja TheCla () avalikele liikmetele. Funktsiooni main () sees on funktsioon TheCla () obj (10, 20).

Väline funktsioon või väline operaator, näiteks funktsioon main (), ei pääse juurde ühegi klassi privaatse liikme juurde, näiteks num1 või num2. Eemaldage kommentaari indikaator // peamise () viimasest lausest. Kui proovite programmi kompileerida, pidage meeles, et programm ei kompileeri, andes veateate.

Vaikespetsifikaator
Klassi vaikespetsifikaator on „privaatne."Niisiis, ülaltoodud klassi kirjeldus on sama mis järgmine kirjeldus, privaatne, kuid ilma täpsustajata:

klass TheCla

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

num1 = n1; num2 = n2;

int meetod ()

tagastama num1;

;

Märge: juurdepääsuprogrammi silt algab täpsustajaga ja sellele järgneb koolon.

Kaitstud spetsifikaator

Klassikirjelduses ja väljastpoolt pärit funktsioonilt või väljastpoolt pärit operaatorilt on kaitstud spetsifikaator sama mis erasektori spetsifikaator. Nüüd asendage ülaltoodud programmi privaatne täpsustaja täpsustajaga, kaitske ja eemaldage kommentaari indikaator // peamise () funktsiooni viimane kui üks lause. Kui proovite programmi kompileerida, pidage meeles, et programm ei kompileeri, andes veateate.

Kaitstud spetsifikaatori küsimus kerkib esile siis, kui tuletatud (päritud) klassi liikmed peavad juurde pääsema põhiklassi (vanem) liikmetele.

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

# kaasata
nimeruumi kasutamine std;
klass TheCla

avalik:
int num1 = 10;
kaitstud:
int num2 = 20;
privaatne:
int num3 = 30;
;
klass ChildCla: avalik TheCla

avalik:
int meetod1 ()

tagastama num1;

int meetod2 ()

tagastama num2;

/ * int meetod3 ()

tagastama num3;
* /
;
int main ()

ChildCla lapsObj;
int no1 = lapsObj.meetod1 ();
cout<int no2 = lapsObj.meetod2 ();
cout<tagastama 0;

Väljund on:
10
20

Põhiklassis on num1 avalik, num2 on kaitstud ja num3 on privaatne. Tuletatud klassis on kõik liikme funktsioonid avalikud. Esimene funktsioon, method1 (), pääseb juurde avalikule andmeliikmele num1. Teine funktsioon, method2 (), pääseb juurde kaitstud andmeliikmele num2. Kolmas funktsioon, method3 (), peaks praegu välja kommenteerima, peaks pääsema juurde privaatsete andmete liikmele num3.

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

klass ChildCla: avalik TheCla

Nüüd tühjendage tuletatud klassi kolmanda liikme funktsiooni määratlus. Kui proovite programmi kompileerida, pidage meeles, et see ei kompileeru, andes veateate.

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

Pange tähele, et avaliku tuletatud klassi avalik liige pääseb juurde baasklassi kaitstud liikmele.

Tuletatud klassi spetsifikaatorid ja liikmete spetsifikaatorid

Kaitstud tuletatud klass avalike liikmetega
Asendage tuletatud klassi deklaratsioonis “avalik” spetsifikatsioon sõnaga “kaitstud” järgmiselt:

klass ChildCla: kaitstud TheCla

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

Niisiis, kui kogu tuletatud klass kuulutatakse kaitstuks, ei pääse selle liikmed põhiklassi eraliikmetele juurde. Selle liikmetel on siiski juurdepääs avalikkusele ja kaitstud põhiklassi liikmetele. See on sama mis tuletatud klassi avalikuks kuulutamise korral.

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

Privaatne tuletatud klass avalike liikmetega
Asendage tuletatud klassi deklaratsioonis „kaitstud” spetsifikaator sõnaga „private” järgmiselt:

klass ChildCla: privaatne TheCla

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

Niisiis, kui kogu tuletatud klass tunnistatakse privaatseks, ei pääse selle liikmed baasklassi eraisikutele juurde. Selle liikmetel on siiski juurdepääs avalikkusele ja kaitstud põhiklassi liikmetele. See on sama mis tuletatud klassi kuulutamisel kaitstuks või avalikuks.

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

# kaasata
nimeruumi kasutamine std;
klass TheCla

avalik:
int num1 = 10;
kaitstud:
int num2 = 20;
privaatne:
int num3 = 30;
;
klass ChildCla: avalik TheCla

kaitstud:
int meetod1 ()

tagastama num1;

int meetod2 ()

tagastama num2;

/ * int meetod3 ()

tagastama num3;
* /
;
int main ()

/ * ChildCla lapsObj;
int no1 = lapsObj.meetod1 ();
cout</ * int nr2 = lapsObj.meetod2 ();
cout<tagastama 0;

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

Nüüd tühjendage tuletatud klassi funktsiooni määratlus, method3 (). Kui proovite programmi kompileerida, pidage meeles, et see ei kompileeru, andes veateate. See tähendab, et eraliikmele ei saa juurde pääseda väliste funktsioonide, operaatorite või tuletatud klassi kaudu. See on sama järeldus, mis tehti ülal eraliikmele juurdepääsu kohta.

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

Nüüd pange kommentaarid tuletatud klassi tagasi ja tühistage funktsiooni main () esimese koodisegmendi kommentaar. Kui proovite programmi kompileerida, pidage meeles, et programm ei kompileeri funktsiooni main () esimese koodisegmendi tõttu. See efekt pole uus. Peale tuletatud klassi, väliste funktsioonide ja väliste operaatorite on kaitstud ja eraõiguslikud (põhi- või tuletatud) klassi liikmed sama. Funktsioon main () näeb mis tahes klassi kaitstud liiget, olenemata sellest, kas see on baas- või tuletatud, sama spetsifikaatori järgi, privaatne ja keelatud sellele juurde pääseda.

Kui funktsiooni main () teise koodisegmenti kommenteerimine tühistatakse, kehtib sama selgitus. See tähendab, et põhifunktsioon () ei pääse juurde tuletatud klassi ega põhiklassi kaitstud ega privaatsele liikmele. See ei sõltu sellest, kas tuletatud klassi kaitstud liige pääseb juurde baasklassi kaitstud liikmele.

Kaitstud tuletatud klass koos kaitstud liikmetega
Asendage tuletatud klassi deklaratsioonis “avalik” spetsifikatsioon sõnaga “kaitstud” järgmiselt:

klass ChildCla: kaitstud TheCla

Pange koodisegmentide kommentaar tagasi funktsiooni main (), kui seda pole veel tehtud. Koostage ja käivitage programm ning pange tähele, et tulemus on nagu varem.

Privaatne tuletatud klass kaitstud liikmetega
Asendage tuletatud klassi deklaratsioonis „kaitstud” spetsifikaator sõnaga „private” järgmiselt:

klass ChildCla: privaatne TheCla

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

Avalik tuletatud klass eraisikutega
Asendage tuletatud klassi deklaratsioonis „private” täpsustaja väärtusega „public” järgmiselt:

klass ChildCla: avalik TheCla

Muutke tuletatud klassi liikmed privaatseks. Koostage ja käivitage programm. Tulemus ei erine juhtumist „Avalik tuletatud klass kaitstud liikmetega”.

Erakaaslastega kaitstud tuletatud klass
Asendage tuletatud klassi deklaratsioonis “avalik” spetsifikatsioon sõnaga “kaitstud” järgmiselt:

klass ChildCla: kaitstud TheCla

Koostage ja käitage programm. See tulemus ei erine juhtumist „Kaitstud tuletatud klass koos kaitstud liikmetega”.

Privaatne tuletatud klass eraliikmetega
Asendage tuletatud klassi deklaratsioonis „kaitstud” spetsifikaator sõnaga „private” järgmiselt:

klass ChildCla: privaatne TheCla

Koostage ja käitage programm. See tulemus ei erine juhtumist „Eraldi tuletatud klass kaitstud liikmetega”.

Järeldus

C ++ juurdepääsu täpsustajad on sõnad "privaatne", "kaitstud" ja "avalik".”Nad otsustavad klassi liikmete juurdepääsu. Juurdepääsuparameetri piirkond algab selle sildist, klassi kirjelduse lõpuni (määratlus) või mõne muu juurdepääsuparameetri alguseni. Iga klassi liige saab juurdepääsu kõigile teistele sama klassi liikmetele. Klassi eraliikmele ei pääse juurde ükski väline funktsioon, mõni väline operaator ega tuletatud klass.

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

Klassi avalikule liikmele pääseb juurde mis tahes välise funktsiooni, välise operaatori või tuletatud klassi kaudu.

Kui klassis puudub juurdepääsuparameeter, eeldatakse, et privaatne täpsustaja on. See tähendab, et vaikepöörduse täpsustaja on privaatne.

Selles töös kasutatud viited

  • Alireza Ebrahimi, PÄRAND: KASUTATAVUS JA PIKENDATAVUS
  • S. Malik, Andmekonstruktsioonid, kasutades C ++ 2. väljaannet
Kursor hüppab või liigub juhuslikult Windows 10-s kirjutamise ajal
Kui leiate, et hiire kursor hüppab või liigub Windowsi sülearvutisse või arvutisse kirjutades automaatselt, juhuslikult, võivad mõned neist soovituste...
Kuidas muuta hiire ja puuteplaatide kerimise suund Windows 10-s ümber
Hiir ja PuuteplaatNeed muudavad arvutamise mitte ainult lihtsaks, vaid ka tõhusamaks ja vähem aeganõudvaks. Me ei kujuta ette elu ilma nende seadmetet...
Kuidas muuta hiirekursori ja kursori suurust, värvi ja skeemi Windows 10-s
Windows 10 hiirekursor ja kursor on operatsioonisüsteemi väga olulised aspektid. Seda võib öelda ka teiste opsüsteemide kohta, nii et tegelikult pole ...