C ++

C ++ prieigos specifikacijos

C ++ prieigos specifikacijos
C ++ klasė yra kintamųjų ir funkcijų rinkinys, sukonfigūruotas veikti kartu. Kai klasės kintamiesiems suteikiamos reikšmės, gaunamas objektas. Objektas turi tuos pačius kintamuosius ir funkcijas kaip klasė, tačiau šį kartą kintamieji turi reikšmes. Iš vienos klasės galima sukurti daug objektų. Vienas objektas skiriasi nuo kito objekto pagal skirtingas kito objekto kintamiesiems priskirtas vertes. Sakoma, kad kuriant objektą iš klasės, objektas yra momentinis. Net jei dviejų skirtingų objektų kintamųjų reikšmės yra vienodos, šie objektai yra skirtingi objektai, programoje identifikuojami skirtingais pavadinimais. Objekto ir jį atitinkančios klasės kintamieji vadinami duomenų nariais. Objekto ir jį atitinkančios klasės funkcijos vadinamos narių funkcijomis. Duomenų nariai ir narių funkcijos vadinamos nariais.

Žodis prieiga reiškia perskaityti ar pakeisti kintamojo vertę, taip pat reiškia naudoti funkciją. C ++ prieigos specifikatoriai yra žodžiai „privatus“, „saugomas“ ir „viešas“.„Jie nusprendžia, ar narys gali pasiekti kitus savo klasės narius, ar funkcija ar operatorius, priklausantis ne klasei ir nepriklausantis klasei, gali pasiekti bet kurį klasės narį. Jie taip pat nusprendžia, ar išvestinės (vaikų) klasės narys gali prisijungti prie tėvų klasės nario.

Norint suprasti šį straipsnį ir išbandyti pateiktą kodą, reikalingos pagrindinės žinios apie C ++.

Straipsnio turinys

Viešieji ir privatūs specifikatoriai

Klasė
Bet kuris klasės narys gali prieiti prie bet kurio kito tos pačios klasės nario, nepriklausomo nuo jo, pažymėto „vieša“ arba „privati“.Apsvarstykite šią programą:

# įtraukti
naudojant vardų sritį std;
klasė „TheCla“

privatus:
int num1;
int num2;
vieša:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int metodas ()

grąžinti num1;

;
int main ()

TheCla obj (10, 20);
int no2 = obj.metodas ();
cout<// int no1 = obj.num1;
grąžinti 0;

Išvestis yra 10. Privatūs nariai yra num1 ir num2. Visuomenės nariai yra „TheCla“ () ir „method“ (). Atkreipkite dėmesį, kad „TheCla“ () yra konstruktoriaus funkcija, inicijuojanti dominančius kintamuosius. Prieigos specifikatoriaus sritis prasideda nuo jos etiketės iki klasės aprašo (apibrėžimo) pabaigos arba nuo kito prieigos specifikatoriaus pradžios.

Pagrindinėje () funkcijoje pirmasis sakinys yra instancija, apimanti konstruktoriaus funkciją, kuri inicijuoja skaičių1 ir num2. Kitas pareiškimas kviečia visuomenės klasės narį, method ().

Dabar klasės aprašyme (apibrėžime) viešojo nario funkcija „TheCla“ () prieina privačius narius, num1 ir num2. Be to, viešojo nario funkcija, metodas () pasiekia privatų narį, num1. Bet kuris klasės aprašyme esantis narys gali pasiekti bet kurį kitą narį pagal tą patį klasės aprašą; nesvarbu, kuris narys yra privatus ar viešas.

Tačiau funkcija ar operatorius, nedeklaruotas klasės aprašyme ir už klasės aprašymo ribų, gali pasiekti tik viešus klasės narius. Pavyzdžiui, pagrindinė () funkcija yra funkcija, deklaruota už klasės aprašymo ribų. Ji galėjo pasiekti tik metodą () ir „TheCla“ () viešuosius narius. Pagrindinės () funkcijos viduje „TheCla“ () funkcija yra obj (10, 20).

Išorinė funkcija arba išorinis operatorius, pvz., Pagrindinė () funkcija, negali pasiekti nė vieno iš privačių klasės narių, pvz., Num1 ar num2. Pašalinkite komentaro indikatorių // iš pagrindinio () paskutinio nurodymo (). Jei bandote kompiliuoti programą, atkreipkite dėmesį, kad programa nekompiliuos, pateikdama klaidos pranešimą.

Numatytasis specifikatorius
Numatytasis klasės specifikatorius yra „privatus.Taigi, aukščiau pateiktas klasės aprašymas yra toks pat, kaip šis aprašymas, privatus, bet be specifikatoriaus:

klasė „TheCla“

int num1;
int num2;
vieša:
TheCla (int n1, int n2)

num1 = n1; num2 = n2;

int metodas ()

grąžinti num1;

;

Pastaba: prieigos specifikatoriaus etiketė prasideda specifikatoriumi ir po jos yra dvitaškis.

Saugomas specifikatorius

Klasės aprašyme ir išorinėje funkcijoje ar išoriniame operatoriuje saugomas specifikatorius yra tas pats, kas privatus specifikatorius. Dabar pakeiskite aukščiau nurodytos programos privatųjį specifikatorių specifikatoriumi, apsaugokite ir pašalinkite komentaro indikatorių // iš pagrindinio () funkcijos „paskutinis vienas“ teiginio. Jei bandote kompiliuoti programą, atkreipkite dėmesį, kad programa nekompiliuos, pateikdama klaidos pranešimą.

Saugomo specifikatoriaus problema iškyla tada, kai išvestinės (paveldėtos) klasės nariai turi prieigą prie pagrindinės (tėvų) klasės narių.

Išvestinė klasė su visuomenės nariais
Apsvarstykite šią programą:

# įtraukti
naudojant vardų sritį std;
klasė „TheCla“

vieša:
int num1 = 10;
saugoma:
int num2 = 20;
privatus:
int num3 = 30;
;
klasė „ChildCla“: viešoji „TheCla“

vieša:
int metodas1 ()

grąžinti num1;

int metodas2 ()

grąžinti num2;

/ * int metodas3 ()

grąžinti num3;
* /
;
int main ()

ChildCla vaikasObj;
int no1 = vaikasObj.metodas1 ();
cout<int no2 = vaikasObj.metodas2 ();
cout<grąžinti 0;

Rezultatas yra:
10
20

Bazinėje klasėje num1 yra viešas, num2 yra apsaugotas, o num3 yra privatus. Išvestinėje klasėje visos narių funkcijos yra viešos. Pirmoji funkcija, method1 (), pasiekia viešųjų duomenų narį num1. Antroji funkcija, method2 (), pasiekia saugomą duomenų narį num2. Trečioji funkcija, method3 (), nors šiuo metu komentuojama, turėtų pasiekti privačių duomenų narį num3.

Išvestinė klasė nėra deklaruojama be prieigos specifikatoriaus (viešojo, saugomo ar privataus). Aukščiau išvesta klasė yra deklaruojama su viešuoju specifikatoriumi, tai yra:

„ChildCla“ klasė: viešoji „TheCla“

Dabar nekomentuokite trečiosios narės funkcijos apibrėžimo išvestinėje klasėje. Jei bandote kompiliuoti programą, atkreipkite dėmesį, kad ji nebus kompiliuojama, pateikiant klaidos pranešimą.

Pastaba: Kai visa išvestinė klasė paskelbiama vieša, jos nariai negali pasiekti privačių bazinės klasės narių. Tačiau jos nariai gali susipažinti su visuomene ir saugomais bazinės klasės nariais. Pirmiau pateikta programa tai iliustruoja.

Tačiau atkreipkite dėmesį, kad viešosios išvestinės klasės narys gali prisijungti prie saugomo pagrindinės klasės nario.

Išvestiniai klasių specifikatoriai ir narių specifikacijos

Saugoma išvestinė klasė su visuomenės nariais
Aukščiau nurodytos išvestinės klasės deklaracijoje pakeiskite „public“ specifikaciją į „protected“:

„ChildCla“ klasė: saugoma „TheCla“

Sudarykite ir paleiskite programą ir atkreipkite dėmesį, kad rezultatas yra toks pats kaip anksčiau.

Taigi, kai visa išvestinė klasė paskelbiama saugoma, jos nariai negali prisijungti prie privačių bazinės klasės narių. Tačiau jos nariai gali susipažinti su visuomene ir saugomais bazinės klasės nariais. Tai tas pats, kas tada, kai išvestinė klasė paskelbiama vieša.

Pastaba: saugomas viešosios išvestinės klasės narys gali prisijungti prie saugomo pagrindinės klasės nario.

Privati ​​išvesta klasė su viešaisiais nariais
Aukščiau nurodytos išvestinės klasės deklaracijoje pakeiskite „apsaugotą“ specifikaciją „privačia“ taip:

klasės „ChildCla“: privati ​​„TheCla“

Sudarykite ir paleiskite programą ir atkreipkite dėmesį, kad rezultatas yra toks pats kaip anksčiau.

Taigi, kai visa išvestinė klasė paskelbiama privačia, jos nariai negali pasiekti privačių bazinės klasės narių. Tačiau jos nariai gali susipažinti su visuomene ir saugomais bazinės klasės nariais. Tai tas pats, kas tada, kai išvestinė klasė paskelbiama saugoma ar vieša.

Vieša išvesta klasė su saugomais nariais
Įveskite, sukompiliuokite ir paleiskite šią programą, kurioje saugoma visa išvestinė klasė ir jos nariai. Kai kurie kodo segmentai yra šie:

# įtraukti
naudojant vardų sritį std;
klasė „TheCla“

vieša:
int num1 = 10;
saugoma:
int num2 = 20;
privatus:
int num3 = 30;
;
klasė „ChildCla“: viešoji „TheCla“

saugoma:
int metodas1 ()

grąžinti num1;

int metodas2 ()

grąžinti num2;

/ * int metodas3 ()

grąžinti num3;
* /
;
int main ()

/ * ChildCla vaikasObj;
int no1 = vaikasObj.metodas1 ();
cout</ * int no2 = vaikasObj.metodas2 ();
cout<grąžinti 0;

Programa veikia tokia, kokia yra. Nėra išvesties ir neturėtų būti išvesties, atsižvelgiant į tai, kaip buvo įrašyta programa.

Dabar nekomentuokite išvestinės klasės funkcijos apibrėžimo method3 (). Jei bandote kompiliuoti programą, atkreipkite dėmesį, kad ji nebus kompiliuojama, pateikiant klaidos pranešimą. Tai reiškia, kad privataus nario negalima pasiekti iš išorinės funkcijos, išorinio operatoriaus ar išvestinės klasės. Tai yra ta pati išvada, kaip buvo padaryta pirmiau, dėl galimybės naudotis privačiu nariu.

Pastaba: saugomas išvestinės klasės narys gali prieiti prie saugomo pagrindinės klasės nario.

Dabar įrašykite komentarus į išvestinę klasę ir panaikinkite pirmojo pagrindinio () funkcijos segmento komentavimą. Jei bandote kompiliuoti programą, atkreipkite dėmesį, kad programa nekompiliuos dėl pirmojo kodo segmento pagrindinėje () funkcijoje. Šis efektas nėra naujas. Be išvestinės klasės, išorinių funkcijų ir išorinių operatorių, saugomi ir privatūs (bazinės arba išvestinės) klasės nariai yra to paties specifikatoriaus, privatūs. Pagrindinė () funkcija mato saugomą bet kurios klasės, tiek bazinės, tiek išvestinės, narę, priklausančią nuo tos pačios specifikacijos, privačios, ir jai uždrausta naudotis.

Jei antrasis pagrindinės () funkcijos segmentas nekomentuojamas, bus taikomas tas pats paaiškinimas. Tai yra, pagrindinė () funkcija negalės pasiekti išvestinės klasės arba bazinės klasės saugomo ar privataus nario. Tai nepriklauso nuo to, ar išvestinės klasės saugomas narys galėtų prisijungti prie saugomo pagrindinės klasės nario.

Saugoma išvestinė klasė su saugomais nariais
Aukščiau nurodytos išvestinės klasės deklaracijoje pakeiskite „public“ specifikaciją į „protected“:

„ChildCla“ klasė: saugoma „TheCla“

Įdėkite kodo segmentų komentarą atgal į pagrindinę () funkciją, jei tai dar nebuvo padaryta. Sudarykite ir paleiskite programą ir atkreipkite dėmesį, kad rezultatas yra toks, koks buvo anksčiau.

Privati ​​išvesta klasė su saugomais nariais
Aukščiau nurodytos išvestinės klasės deklaracijoje pakeiskite „apsaugotą“ specifikaciją „privačia“ taip:

klasė „ChildCla“: privati ​​„TheCla“

Sudarykite ir paleiskite programą ir atkreipkite dėmesį, kad rezultatas bus toks, koks buvo anksčiau.

Vieša išvesta klasė su privačiais nariais
Aukščiau nurodytos išvestinės klasės deklaracijoje „privatų“ specifikatorių pakeiskite „viešu“ taip:

„ChildCla“ klasė: viešoji „TheCla“

Padarykite išvestinės klasės narius privačius. Sudarykite ir paleiskite programą. Rezultatas nesiskiria nuo bylos „Išvestinė klasė su saugomais nariais“.

Saugoma išvestinė klasė su privačiais nariais
Aukščiau nurodytos išvestinės klasės deklaracijoje pakeiskite „public“ specifikaciją į „protected“:

„ChildCla“ klasė: saugoma „TheCla“

Sudarykite ir paleiskite programą. Šis rezultatas nesiskiria nuo bylos „Saugoma išvestinė klasė su saugomais nariais“.

Privati ​​išvesta klasė su privačiais nariais
Aukščiau nurodytos išvestinės klasės deklaracijoje pakeiskite „apsaugotą“ specifikaciją „privačia“ taip:

klasės „ChildCla“: privati ​​„TheCla“

Sudarykite ir paleiskite programą. Šis rezultatas nesiskiria nuo bylos „Privati ​​išvestinė klasė su saugomais nariais“.

Išvada

C ++ prieigos specifikatoriai yra žodžiai „privatus“, „saugomas“ ir „viešas“.„Jie nusprendžia patekti į klasės narius. Prieigos specifikatoriaus sritis prasideda nuo jos etiketės, iki klasės aprašo pabaigos (apibrėžimo) arba nuo kito prieigos specifikatoriaus pradžios. Bet kuris klasės narys gali pasiekti bet kurį kitą tos pačios klasės narį. Prie privataus klasės nario negali prisijungti jokia išorinė funkcija, išorinis operatorius ar išvestinė klasė.

Pagrindinės klasės narys turi būti apsaugotas, kad išvestinės klasės narys galėtų prieiti prie privataus pagrindinės klasės nario. Šį saugomą bazinės klasės narį išorinė funkcija arba išorinis operatorius laiko privačiu bazinės klasės nariu.

Prie viešo klasės nario gali prisijungti bet kuri išorinė funkcija, išorinis operatorius ar išvestinė klasė.

Jei klasėje nėra jokio prieigos specifikatoriaus, laikoma, kad privatus specifikatorius. Tai yra, numatytasis prieigos specifikatorius yra privatus.

Šiame darbe naudojamos nuorodos

  • Alireza Ebrahimi, PAVELDAS: PAKARTOTINUMAS IR IŠPLĖTIMAS
  • S. Malik, Duomenų struktūros naudojant C ++ 2 leidimą
Naudingi įrankiai „Linux“ žaidėjams
Jei jums patinka žaisti žaidimus „Linux“ sistemoje, yra tikimybė, kad galbūt naudojote tokias programas ir įrankius kaip „Wine“, „Lutris“ ir „OBS Stud...
„HD Remastered“ žaidimai, skirti „Linux“, kurie niekada anksčiau nebuvo išleisti „Linux“
Daugelis žaidimų kūrėjų ir leidėjų siūlo senų žaidimų HD remasterį, kad prailgintų franšizės laiką. Prašome gerbėjų, prašančių suderinamumo su šiuolai...
Kaip naudoti „AutoKey“, norint automatizuoti „Linux“ žaidimus
„AutoKey“ yra darbalaukio automatizavimo įrankis, skirtas „Linux“ ir „X11“, užprogramuotas „Python 3“, „GTK“ ir „Qt“. Naudodami scenarijų ir „MACRO“ f...