C ++ prieigos nurodymai

C Access Specifiers



„C ++“ klasė yra kintamųjų ir funkcijų rinkinys, sukonfigūruotas veikti kartu. Kai klasės kintamiesiems pateikiamos 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 skirtingą reikšmių rinkinį, priskirtą kito objekto kintamiesiems. Sakoma, kad objekto sukūrimas iš klasės yra objekto išradimas. Net jei du skirtingi objektai turi tas pačias kintamųjų reikšmes, š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 nario funkcijomis. Duomenų nariai ir narių funkcijos vadinamos nariais.

Žodis prieiga reiškia skaityti ar keisti kintamojo vertę, taip pat reiškia naudoti funkciją. C ++ prieigos specifikacijos yra žodžiai, privatūs, saugomi ir vieši. Jie nusprendžia, ar narys gali pasiekti kitus savo klasės narius, ar klasei nepriklausanti funkcija ar operatorius gali pasiekti bet kurį klasės narį. Jie taip pat nusprendžia, ar išvestinės (vaikų) klasės narys gali pasiekti tėvų klasės narį.







Norint suprasti šį straipsnį ir išbandyti pateiktą kodą, reikia pagrindinių C ++ žinių.



Straipsnio turinys

Viešieji ir privatieji nurodymai

Klasė
Bet kuris klasės narys gali pasiekti bet kurį kitą tos pačios klasės narį, nepriklausomai nuo to, ar jis pažymėtas viešuoju ar privačiu. Apsvarstykite šią programą:



#įtraukti
naudojant vardų sritisvalandų;

klasėTheCla
{
privatus:
tarptnum1;
tarptnum2;
viešas:
TheCla(tarptn1,tarptn2)
{
num1=n1;num2=n2;
}
tarptmetodas()
{
grįžtinum1;
}
};

tarptpagrindinis()
{
TheCla obj(10,dvidešimt);
tarpt2=obj.metodas();
kaina<<2<<' n';

// int nr1 = obj.num1;

grįžti 0;
}

Rezultatas yra 10. Privatūs nariai yra num1 ir num2. Viešieji nariai yra TheCla () ir metodas (). Atminkite, kad TheCla () yra konstruktoriaus funkcija, inicijuojanti dominančius kintamuosius. Prieigos specifikacijos sritis prasideda nuo jos etiketės iki klasės aprašo (apibrėžimo) pabaigos arba kito prieigos specifikatoriaus pradžios.





Pagrindinėje () funkcijoje pirmasis teiginys yra konstruktoriaus funkciją atspindintis momentas, inicijuojantis num1 ir num2. Kitas teiginys kviečia klasės narį, metodą ().

Dabar klasės apraše (apibrėžime) viešojo nario funkcija „TheCla“ () pasiekia privačius narius, numerius 1 ir numerius 2. Be to, viešojo nario funkcija, metodas (), pasiekia privatų narį, num1. Bet kuris klasės aprašo narys gali pasiekti bet kurį kitą tos pačios klasės aprašo narį; nesvarbu, kuris narys yra privatus ar viešas.



Tačiau funkcija ar operatorius, nedeklaruotas klasės apraše ir už klasės aprašo ribų, gali pasiekti tik viešus klasės narius. Pavyzdžiui, pagrindinė () funkcija yra funkcija, deklaruota už klasės aprašo 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 jokių privačių klasės narių, pvz., Num1 ar num2. Pašalinkite komentaro indikatorių // iš paskutinio, bet vieno teiginio pagrindiniame (). Jei bandysite 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šas yra toks pat, kaip šis aprašas, privatus, bet be specifikacijos:

klasėTheCla
{
tarptnum1;
tarptnum2;
viešas:
TheCla(tarptn1,tarptn2)
{
num1=n1;num2=n2;
}
tarptmetodas()
{
grįžtinum1;
}
};

Pastaba : prieigos specifikacijos etiketė prasideda specifikacija, o po jos eina dvitaškis.

Apsaugotas specifikatorius

Klasės apraše ir išorinėje funkcijoje ar išorės operatoriuje apsaugotas specifikatorius yra tas pats, kas privatus. Dabar pakeiskite privačią specifikaciją aukščiau esančioje programoje specifikacija, apsaugokite ir pašalinkite komentaro indikatorių // iš paskutinio, bet vieno, pagrindinės () funkcijos teiginio. Jei bandysite kompiliuoti programą, atkreipkite dėmesį, kad programa nekompiliuos, pateikdama klaidos pranešimą.

Apsaugoto specifikatoriaus problema iškyla, kai išvestinės (paveldėtos) klasės nariai turi pasiekti bazinės (pirminės) klasės narius.

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

#įtraukti
naudojant vardų sritisvalandų;

klasėTheCla
{
viešas:
tarptnum1= 10;
apsaugotas:
tarptnum2= dvidešimt;
privatus:
tarptnum3= 30;
};

klasėChildCla: viešasTheCla
{
viešas:
tarpt1 metodas()
{
grįžtinum1;
}
tarpt2 metodas()
{
grįžtinum2;
}
/*int metodas3 ()
{
grįžti num3;
} * /

};

tarptpagrindinis()
{
VaikasCla vaikasObj;
tarptNr1=vaikasObj.1 metodas();
kaina<<Nr1<<' n';

tarpt2=vaikasObj.2 metodas();
kaina<<2<<' n';

grįžti 0;
}

Išėjimas yra:
10
dvidešimt

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, metodas1 (), pasiekia viešųjų duomenų narį num1. Antroji funkcija, metodas2 (), pasiekia apsaugotą duomenų narį num2. Trečioji funkcija - metodas 3 (), nors ir šiuo metu pakomentuota, turėtų pasiekti privačius duomenų narius, numerius 3.

Išvestinė klasė nėra deklaruojama be prieigos specifikacijos (viešos, apsaugotos ar privačios). Aukščiau išvestinė klasė deklaruojama su viešuoju specifikatoriumi, tai yra:

klasėChildCla: viešasTheCla{}

Dabar panaikinkite trečiosios nario funkcijos apibrėžimą išvestinėje klasėje. Jei bandysite kompiliuoti programą, atkreipkite dėmesį, kad ji nebus sukurta, o tai parodys 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 prieiti prie visuomenės ir saugomų bazinės klasės narių. Aukščiau pateikta programa tai iliustruoja.

Tačiau atminkite, kad viešas išvestinės klasės narys gali pasiekti apsaugotą bazinės klasės narį.

Išvestiniai klasių ir narių specifikatoriai

Apsaugota išvestinė klasė su viešaisiais nariais
Aukščiau išvestos klasės deklaracijoje viešąjį specifikatorių pakeiskite į apsaugotą taip:

klasėChildCla: apsaugotasTheCla{}

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

Taigi, kai visa išvestinė klasė yra paskelbta saugoma, jos nariai negali pasiekti privačių bazinės klasės narių. Tačiau jos nariai gali prieiti prie visuomenės ir saugomų bazinės klasės narių. Tai tas pats, kas išvestinė klasė paskelbta vieša.

Pastaba : apsaugotas viešosios kilmės klasės narys gali pasiekti apsaugotą bazinės klasės narį.

Privati ​​išvestinė klasė su viešaisiais nariais
Aukščiau išvestos klasės deklaracijoje pakeiskite apsaugotą specifikatorių į privatų taip:

klasėChildCla: privatusTheCla{}

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

Taigi, kai visa išvestinė klasė yra paskelbta privačia, jos nariai negali pasiekti privačių bazinės klasės narių. Tačiau jos nariai gali prieiti prie visuomenės ir saugomų bazinės klasės narių. Tai tas pats, kas išvestinė klasė paskelbta saugoma ar vieša.

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

#įtraukti
naudojant vardų sritisvalandų;

klasėTheCla
{
viešas:
tarptnum1= 10;
apsaugotas:
tarptnum2= dvidešimt;
privatus:
tarptnum3= 30;
};

klasėChildCla: viešasTheCla
{
apsaugotas:
tarpt1 metodas()
{
grįžtinum1;
}
tarpt2 metodas()
{
grįžtinum2;
}
/*int metodas3 ()
{
grįžti num3;
} * /

};

tarptpagrindinis()
{
/*VaikasCla vaikasObj;
int nr1 = vaikasObj.metodas1 ();
kaina<
/*int no2 = vaikasObj.metodas2 ();
kaina<
grįžti 0;
}

Programa veikia taip, kaip yra. Išvesties nėra ir jos neturėtų būti, atsižvelgiant į tai, kaip programa buvo įvesta.

Dabar panaikinkite funkcijų apibrėžimo metodo3 () komentarus išvestinėje klasėje. Jei bandysite kompiliuoti programą, atkreipkite dėmesį, kad ji nebus sukurta, o tai parodys klaidos pranešimą. Tai reiškia, kad privačiam nariui negalima pasiekti iš išorės funkcijos, išorės operatoriaus ar išvestinės klasės. Tai ta pati išvada, kaip buvo padaryta aukščiau, dėl prieigos prie privataus nario.

Pastaba : apsaugotas išvestinės klasės narys gali pasiekti apsaugotą bazinės klasės narį.

Dabar sugrąžinkite komentarus į išvestinę klasę ir panaikinkite pirmojo kodo segmento komentavimą pagrindinėje () funkcijoje. Jei bandysite kompiliuoti programą, atminkite, kad programa nebus sukurta dėl pirmojo kodo segmento pagrindinėje () funkcijoje. Šis efektas nėra naujas. Be išvestinės klasės, išorinių funkcijų ir išorės operatorių, saugomi ir privatūs (bazinės ar išvestinės) klasės nariai yra to paties specifinio, privataus. Pagrindinė () funkcija mato apsaugotą bet kurios klasės narį, nesvarbu, ar jis yra bazinis, ar išvestinis, kaip to paties specifikatoriaus, privatus, ir jam draudžiama prieiti.

Jei antrasis pagrindinės () funkcijos kodo segmentas nekomentuojamas, bus taikomas tas pats paaiškinimas. Tai yra, pagrindinė () funkcija negalės pasiekti apsaugotos ar privačios išvestinės klasės ar bazinės klasės nario. Tai nepriklauso nuo to, ar apsaugotas išvestinės klasės narys galėtų pasiekti apsaugotą bazinės klasės narį.

Apsaugota išvestinė klasė su saugomais nariais
Aukščiau išvestos klasės deklaracijoje viešąjį specifikatorių pakeiskite į apsaugotą taip:

klasėChildCla: apsaugotasTheCla{}

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

Privati ​​išvestinė klasė su saugomais nariais
Aukščiau išvestos klasės deklaracijoje pakeiskite apsaugotą specifikatorių į privatų taip:

klasėChildCla: privatusTheCla

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

Vieša išvestinė klasė su privačiais nariais
Pakeiskite privatų specifikatorių viešuoju aukščiau išvestinės klasės deklaracijoje:

klasėChildCla: viešasTheCla{}

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

Apsaugota išvestinė klasė su privačiais nariais
Aukščiau išvestos klasės deklaracijoje viešąjį specifikatorių pakeiskite į apsaugotą taip:

klasėChildCla: apsaugotasTheCla{}

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

Privati ​​išvestinė klasė su privačiais nariais
Aukščiau išvestos klasės deklaracijoje pakeiskite apsaugotą specifikatorių į privatų taip:

klasėChildCla: privatusTheCla{}

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

Išvada

C ++ prieigos specifikacijos yra žodžiai privati, apsaugota ir vieša. Jie nusprendžia prieigą prie klasės narių. Prieigos specifikacijos sritis prasideda nuo jos etiketės, iki klasės aprašo (apibrėžimo) pabaigos arba kito prieigos specifikatoriaus pradžios. Bet kuris klasės narys gali pasiekti bet kurį kitą tos pačios klasės narį. Privatus klasės narys negali būti pasiekiamas jokiomis išorinėmis funkcijomis, jokiais išoriniais operatoriais ar išvestine klase.

Bazinės klasės narys turi būti apsaugotas, kad išvestinės klasės narys galėtų pasiekti privatų bazinės klasės narį. Šį apsaugotą bazinės klasės narį išorinė funkcija arba išorinis operatorius laiko privačiu bazinės klasės nariu.

Viešas klasės narys gali pasiekti bet kurią išorinę funkciją, bet kurį išorinį operatorių arba išvestinę klasę.

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

Šiame darbe naudojamos nuorodos