C ++ pristupni specifikatori

C Access Specifiers



U C ++, klasa je skup varijabli i funkcija koje su konfigurirane da rade zajedno. Kada se varijablama klase daju vrijednosti, dobiva se objekt. Objekt ima iste varijable i funkcionira kao klasa, ali ovaj put varijable imaju vrijednosti. Mnogi se objekti mogu stvoriti iz jedne klase. Jedan objekt razlikuje se od drugog objekta prema različitom skupu vrijednosti dodijeljenih varijablama drugog objekta. Za stvaranje objekta iz klase kaže se da predstavlja instanciranje objekta. Čak i ako dva različita objekta imaju iste vrijednosti za svoje varijable, ti su objekti različiti entiteti, identificirani različitim imenima u programu. Varijable za objekt i njegovu odgovarajuću klasu zovu se članovi podataka. Funkcije objekta i pripadajuće klase nazivaju se članske funkcije. Članovi podataka i funkcije člana nazivaju se članovi.

Riječ pristup znači čitanje ili promjenu vrijednosti varijable, a također znači i korištenje funkcije. Specifikatori pristupa C ++ su riječi, privatno, zaštićeno i javno. Oni odlučuju može li član pristupiti drugim članovima svoje klase ili funkcija ili operator izvan klase koji ne pripadaju klasi mogu pristupiti bilo kojem članu klase. Također odlučuju može li član izvedene (podređene) klase pristupiti članu roditeljske klase.







Za razumijevanje ovog članka i testiranje danog koda potrebno je osnovno znanje C ++.



Sadržaj članka

Javni i privatni specifikatori

Klasa
Svaki član klase može pristupiti bilo kojem drugom članu iste klase, neovisno o tome da li je označen kao javni ili privatni. Razmotrite sljedeći program:



#uključi
koristeći imenski prostorsati;

razredTheCla
{
privatna:
intbroj1;
intbroj2;
javnost:
TheCla(intn1,intn2)
{
broj1=n1;broj2=n2;
}
intmetoda()
{
povratakbroj1;
}
};

intglavni()
{
TheCla obj(10,dvadeset);
intbr2=obj.metoda();
trošak<<br2<<' n';

// int no1 = obj.num1;

povratak 0;
}

Izlaz je 10. Privatni članovi su num1 i num2. Javni članovi su TheCla () i method (). Imajte na umu da je TheCla () funkcija konstruktora koja inicijalizira varijable od interesa. Područje specifikatora pristupa počinje od njegove oznake do kraja opisa klase (definicije) ili do početka drugog specifikatora pristupa.





U funkciji main (), prvi izraz je instanciranje koje uključuje funkciju konstruktora, koja inicijalizira num1 i num2. Sljedeći izraz poziva javnog člana, method (), klase.

Sada, u opisu klase (definiciji), funkcija javnog člana, TheCla (), pristupa privatnim članovima, num1 i num2. Također, funkcija javnog člana, method (), pristupa privatnom članu, num1. Svaki član unutar opisa klase može pristupiti bilo kojem drugom članu unutar istog opisa klase; nije važno koji je član privatan ili javni.



Međutim, funkcija ili operator koji nisu deklarirani u opisu klase i izvan opisa klase mogu pristupiti samo javnim članovima klase. Na primjer, funkcija main () je funkcija deklarirana izvan opisa klase. Bio je u mogućnosti pristupiti samo javnim članovima method () i TheCla (). Unutar funkcije main () funkcija TheCla () je obj (10, 20).

Vanjska funkcija ili vanjski operator, poput funkcije main (), ne mogu pristupiti nijednom privatnom članu klase, kao što je num1 ili num2. Uklonite indikator komentara, //, iz posljednje izjave u main (). Ako pokušate sastaviti program, imajte na umu da se program neće kompajlirati, dajući poruku o pogrešci.

Zadani specifikator
Zadani specifikator za klasu je privatan. Dakle, gornji opis klase je isti kao i sljedeći opis, privatan, ali bez specifikatora:

razredTheCla
{
intbroj1;
intbroj2;
javnost:
TheCla(intn1,intn2)
{
broj1=n1;broj2=n2;
}
intmetoda()
{
povratakbroj1;
}
};

Bilješka : oznaka specifikatora pristupa počinje specifikatorom, a zatim slijedi dvotočka.

Zaštićeni specifikator

Unutar opisa klase i iz vanjske funkcije ili vanjskog operatora, zaštićeni specifikator je isti kao i privatni specifikator. Sada, zamijenite privatni specifikator u gore navedenom programu sa specifikatorom, zaštitite i uklonite indikator komentara, //, iz posljednjeg-samo-jednog izraza u funkciji main (). Ako pokušate sastaviti program, imajte na umu da se program neće kompajlirati, dajući poruku o pogrešci.

Pitanje zaštićenog specifikatora pojavljuje se kada članovi izvedene (naslijeđene) klase moraju pristupiti članovima osnovne (nadređene) klase.

Javna izvedbena klasa s javnim članovima
Razmotrite sljedeći program:

#uključi
koristeći imenski prostorsati;

razredTheCla
{
javnost:
intbroj1= 10;
zaštićen:
intbroj2= dvadeset;
privatna:
intbroj3= 30;
};

razredChildCla: javnostTheCla
{
javnost:
intmetoda1()
{
povratakbroj1;
}
intmetoda 2()
{
povratakbroj2;
}
/*int metoda3 ()
{
povratni broj3;
} * /

};

intglavni()
{
ChildCla childObj;
intbr1=dijeteObj.metoda1();
trošak<<br1<<' n';

intbr2=dijeteObj.metoda 2();
trošak<<br2<<' n';

povratak 0;
}

Izlaz je:
10
dvadeset

U osnovnoj klasi, broj 1 je javan, broj 2 je zaštićen, a broj 3 je privatan. U izvedenoj klasi sve su funkcije članice javne. Prva funkcija, method1 (), pristupa članu javnih podataka, num1. Druga funkcija, method2 (), pristupa zaštićenom članu podataka, num2. Treća funkcija, method3 (), iako je trenutno komentirana, trebala bi pristupiti članu privatnih podataka, num3.

Izvedena klasa nije deklarirana bez specifikatora pristupa (javna, zaštićena ili privatna). Gore je izvedena klasa deklarirana s javnim specifikatorom, to jest:

razredChildCla: javnostTheCla{}

Sada uklonite komentar iz definicije treće funkcije u izvedenoj klasi. Ako pokušate sastaviti program, imajte na umu da se neće kompilirati, dajući poruku o pogrešci.

Bilješka : Kad se cijela izvedena klasa proglasi javnom, njezini članovi ne mogu pristupiti privatnim članovima osnovne klase. Njegovi članovi mogu, međutim, pristupiti javnim i zaštićenim članovima osnovne klase. Gornji program to ilustrira.

Međutim, imajte na umu da javni član javne izvedene klase može pristupiti zaštićenom članu osnovne klase.

Izvedeni specifikatori klasa i specifikatori članova

Zaštićena izvedena klasa s javnim članovima
Zamijenite javni specifikator sa zaštićenim u gornjoj deklaraciji izvedene klase, kako slijedi:

razredChildCla: zaštićenTheCla{}

Sastavite i pokrenite program i imajte na umu da je rezultat isti kao i prije.

Dakle, kada se cijela izvedena klasa proglasi zaštićenom, njezini članovi ne mogu pristupiti privatnim članovima osnovne klase. Njegovi članovi mogu, međutim, pristupiti javnim i zaštićenim članovima osnovne klase. To je isto kao kada se izvedena klasa proglasi javnom.

Bilješka : zaštićeni član javne izvedene klase može pristupiti zaštićenom članu osnovne klase.

Privatni izvedeni razred s javnim članovima
Zamijenite zaštićeni specifikator privatnim u gornjoj deklaraciji izvedene klase, kako slijedi:

razredChildCla: privatnaTheCla{}

Sastavite i pokrenite program i imajte na umu da je rezultat isti kao i prije.

Dakle, kada se cijela izvedena klasa proglasi privatnom, njezini članovi ne mogu pristupiti privatnim članovima osnovne klase. Njegovi članovi mogu, međutim, pristupiti javnim i zaštićenim članovima osnovne klase. To je isto kao kada se izvedena klasa proglasi zaštićenom ili javnom.

Javno izvedeno predavanje sa zaštićenim članovima
Upišite, kompajlirajte i pokrenite sljedeći program u kojem je zaštićena cijela izvedena klasa, a zaštićeni su i njeni članovi. Neki segmenti koda su sljedeći:

#uključi
koristeći imenski prostorsati;

razredTheCla
{
javnost:
intbroj1= 10;
zaštićen:
intbroj2= dvadeset;
privatna:
intbroj3= 30;
};

razredChildCla: javnostTheCla
{
zaštićen:
intmetoda1()
{
povratakbroj1;
}
intmetoda 2()
{
povratakbroj2;
}
/*int metoda3 ()
{
povratni broj3;
} * /

};

intglavni()
{
/*ChildCla childObj;
int no1 = childObj.method1 ();
trošak<
/*int no2 = childObj.method2 ();
trošak<
povratak 0;
}

Program funkcionira takav kakav jest. Ne postoji izlaz, niti bi trebao biti izlaz, ovisno o načinu na koji je program upisan.

Sada, ne komentirajte definiciju funkcije, method3 (), u izvedenoj klasi. Ako pokušate sastaviti program, imajte na umu da se neće kompilirati, dajući poruku o pogrešci. To znači da se privatnom članu ne može pristupiti iz vanjske funkcije, vanjskog operatora ili izvedene klase. Ovo je isti zaključak koji je gore zaključen, a odnosi se na pristup privatnom članu.

Bilješka : zaštićeni član zaštićene izvedene klase može pristupiti zaštićenom članu osnovne klase.

Sada, vratite komentare u izvedenu klasu i uklonite komentar iz prvog segmenta koda u funkciji main (). Ako pokušate sastaviti program, imajte na umu da se program neće prevesti zbog prvog segmenta koda u funkciji main (). Ovaj učinak nije nov. Osim izvedene klase, vanjskih funkcija i vanjskih operatora, zaštićeni i privatni članovi (osnovne ili izvedene) klase istog su specifikatora, privatni. Funkcija main () zaštićeni član bilo koje klase, bilo osnovne ili izvedene, prema istom specifikatoru, smatra privatnim i zabranjen joj je pristup.

Ako drugi segment koda funkcije main () nije komentiran, primijenit će se isto objašnjenje. Odnosno, funkcija main () neće moći pristupiti zaštićenom ili privatnom članu izvedene klase ili osnovne klase. To neovisno o tome je li zaštićeni član izvedene klase mogao pristupiti zaštićenom članu osnovne klase.

Zaštićena izvedena klasa sa zaštićenim članovima
Zamijenite javni specifikator sa zaštićenim u gornjoj deklaraciji izvedene klase, kako slijedi:

razredChildCla: zaštićenTheCla{}

Vratite komentar segmenata koda natrag u funkciju main (), ako to već nije učinjeno. Sastavite i pokrenite program i imajte na umu da je rezultat isti kao i prije.

Privatni izvedeni razred sa zaštićenim članovima
Zamijenite zaštićeni specifikator privatnim u gornjoj deklaraciji izvedene klase, kako slijedi:

razredChildCla: privatnaTheCla

Sastavite i pokrenite program i imajte na umu da će rezultat biti kao i prije.

Javno izvedeno predavanje s privatnim članovima
Zamijenite privatni specifikator s javnim u gornjoj deklaraciji izvedene klase, kako slijedi:

razredChildCla: javnostTheCla{}

Učinite članove izvedene klase privatnima. Sastavite i pokrenite program. Rezultat se ne razlikuje od slučaja Javna izvedena klasa sa zaštićenim članovima.

Zaštićena izvedena klasa s privatnim članovima
Zamijenite javni specifikator sa zaštićenim u gornjoj deklaraciji izvedene klase, kako slijedi:

razredChildCla: zaštićenTheCla{}

Sastavite i pokrenite program. Ovaj se rezultat ne razlikuje od slučaja Zaštićena izvedena klasa sa zaštićenim članovima.

Privatni izvedeni razred s privatnim članovima
Zamijenite zaštićeni specifikator privatnim u gornjoj deklaraciji izvedene klase, kako slijedi:

razredChildCla: privatnaTheCla{}

Sastavite i pokrenite program. Ovaj se rezultat ne razlikuje od slučaja Privatna izvedena klasa sa zaštićenim članovima.

Zaključak

Specifikatori pristupa C ++ riječi su riječi privatno, zaštićeno i javno. Oni odlučuju o pristupu članovima klase. Područje specifikatora pristupa počinje od njegove oznake, do kraja opisa klase (definicije) ili do početka drugog specifikatora pristupa. Svaki član klase može pristupiti bilo kojem drugom članu iste klase. Privatnom članu klase ne može pristupiti bilo koja vanjska funkcija, vanjski operator ili izvedena klasa.

Član osnovne klase mora biti zaštićen tako da članu izvedene klase može pristupiti privatni član osnovne klase. Ovaj zaštićeni član osnovne klase vanjska funkcija ili vanjski operator smatraju privatnim članom osnovne klase.

Javnom članu klase može se pristupiti iz bilo koje vanjske funkcije, bilo kojeg vanjskog operatora ili izvedene klase.

U nedostatku bilo kojeg specifikatora pristupa u klasi, pretpostavlja se privatni specifikator. Odnosno, zadana specifikacija pristupa je privatna.

Reference korištene u ovom radu