Ц ++ Спецификатори приступа

C Access Specifiers



У Ц ++, класа је скуп променљивих и функција које су конфигурисане да раде заједно. Када се променљивим класе дају вредности, добија се објекат. Објекат има исте променљиве и функционише као класа, али овога пута променљиве имају вредности. Многи објекти се могу креирати из једне класе. Један објекат се разликује од другог објекта према различитом скупу вредности додељеном променљивим другог објекта. За стварање објекта из класе се каже да представља инстанцирање објекта. Чак и ако два различита објекта имају исте вредности за своје променљиве, ти објекти су различити ентитети, идентификовани различитим називима у програму. Променљиве за објекат и одговарајућу класу називају се чланови података. Функције објекта и одговарајуће класе називају се функције чланице. Чланови података и функције члана називају се чланови.

Реч приступ значи читање или промену вредности променљиве, а такође значи и коришћење функције. Спецификатори приступа Ц ++ су речи, приватно, заштићено и јавно. Они одлучују да ли члан може приступити другим члановима своје класе, или да ли функција или оператор изван класе који не припадају класи могу приступити било којем члану класе. Они такође одлучују да ли члан изведене (подређене) класе може приступити члану родитељске класе.







Да бисте разумели овај чланак и тестирали дати код, потребно је основно знање Ц ++.



Садржај чланка

Јавни и приватни спецификатори

Класа
Сваки члан класе може приступити било којем другом члану исте класе, независно од тога да ли је означен као јавни или приватни. Размотрите следећи програм:



#инцлуде
Користећи именски просторсати;

класаТхеЦла
{
приватно:
интнум1;
интнум2;
јавности:
ТхеЦла(интн1,интн2)
{
нум1=н1;нум2=н2;
}
интметода()
{
повратакнум1;
}
};

интглавни()
{
ТхеЦла обј(10,двадесет);
интно2=обј.метода();
цена<<но2<<' н';

// инт но1 = обј.нум1;

повратак 0;
}

Излаз је 10. Приватни чланови су нум1 и нум2. Јавни чланови су ТхеЦла () и метход (). Имајте на уму да је ТхеЦла () функција конструктора која иницијализује променљиве од интереса. Регион спецификатора приступа почиње од његове ознаке до краја описа класе (дефиниције) или до почетка другог спецификатора приступа.





У функцији маин (), прва наредба је инстанцирање које укључује функцију конструктора, која иницијализује нум1 и нум2. Следећа наредба позива јавног члана, метход (), класе.

Сада, у опису класе (дефиницији), функција јавних чланова, ТхеЦла (), приступа приватним члановима, нум1 и нум2. Такође, функција јавног члана, метход (), приступа приватном члану, нум1. Сваки члан унутар описа класе може приступити било ком другом члану унутар истог описа класе; није важно који је члан приватан или јавни.



Међутим, функција или оператор који нису декларисани у опису класе и изван описа класе могу приступити само јавним члановима класе. На пример, функција маин () је функција декларисана изван описа класе. Могао је приступити само методима () и јавним члановима ТхеЦла (). Унутар главне () функције, функција ТхеЦла () је обј (10, 20).

Спољна функција или спољни оператор, као што је функција маин (), не могу приступити ниједном приватном члану класе, као што је нум1 или нум2. Уклоните индикатор коментара, //, из последње изјаве у маин (). Ако покушате компајлирати програм, имајте на уму да се програм неће компајлирати, дајући поруку о грешци.

Подразумевани спецификатор
Подразумевани спецификатор класе је привате. Дакле, горњи опис класе је исти као и следећи опис, приватан, али без спецификатора:

класаТхеЦла
{
интнум1;
интнум2;
јавности:
ТхеЦла(интн1,интн2)
{
нум1=н1;нум2=н2;
}
интметода()
{
повратакнум1;
}
};

Белешка : ознака спецификатора приступа почиње спецификатором, а затим следи двотачка.

Заштићени спецификатор

Унутар описа класе и спољне функције или спољног оператора, заштићени спецификатор је исти као приватни спецификатор. Сада, замените приватни спецификатор у горе наведеном програму са спецификатором, заштитите и уклоните индикатор коментара, //, из исказа ласт-бут-оне у функцији маин (). Ако покушате компајлирати програм, имајте на уму да се програм неће компајлирати, дајући поруку о грешци.

Питање заштићеног спецификатора појављује се када чланови изведене (наслеђене) класе морају приступити члановима основне (надређене) класе.

Јавна изведена класа са јавним члановима
Размотрите следећи програм:

#инцлуде
Користећи именски просторсати;

класаТхеЦла
{
јавности:
интнум1= 10;
заштићен:
интнум2= двадесет;
приватно:
интнум3= 30;
};

класаЦхилдЦла: јавностиТхеЦла
{
јавности:
интметода1()
{
повратакнум1;
}
интметход2()
{
повратакнум2;
}
/*инт метход3 ()
{
ретурн нум3;
} * /

};

интглавни()
{
ЦхилдЦла цхилдОбј;
интно1=цхилдОбј.метода1();
цена<<но1<<' н';

интно2=цхилдОбј.метход2();
цена<<но2<<' н';

повратак 0;
}

Излаз је:
10
двадесет

У основној класи, број 1 је јаван, број 2 је заштићен, а број 3 је приватан. У изведеној класи, све функције чланице су јавне. Прва функција, метход1 (), приступа члану јавних података, нум1. Друга функција, метход2 (), приступа заштићеном члану података, нум2. Трећа функција, метход3 (), иако тренутно коментарисана, требало би да приступи члану приватних података, нум3.

Изведена класа се не декларише без спецификатора приступа (јавни, заштићени или приватни). Изнад, изведена класа је декларисана са јавним спецификатором, то јест:

класаЦхилдЦла: јавностиТхеЦла{}

Сада уклоните коментар са дефиниције функције трећег члана у изведеној класи. Ако покушате компајлирати програм, имајте на уму да се он неће компајлирати, дајући поруку о грешци.

Белешка : Када се цијела изведена класа прогласи јавном, њени чланови не могу приступити приватним члановима основне класе. Његови чланови, међутим, могу приступити јавним и заштићеним члановима основне класе. Горњи програм то илуструје.

Међутим, имајте на уму да јавни члан јавне изведене класе може приступити заштићеном члану основне класе.

Изведени спецификатори класа и спецификатори чланова

Заштићена изведена класа са јавним члановима
Замените јавни спецификатор са заштићеним у декларацији изведене класе изнад, на следећи начин:

класаЦхилдЦла: заштићенТхеЦла{}

Саставите и покрените програм и имајте на уму да је резултат исти као и раније.

Дакле, када се цела изведена класа прогласи заштићеном, њени чланови не могу приступити приватним члановима основне класе. Његови чланови, међутим, могу приступити јавним и заштићеним члановима основне класе. Ово је исто као када се изведена класа прогласи јавном.

Белешка : заштићени члан јавне изведене класе може приступити заштићеном члану основне класе.

Приватни изведени час са јавним члановима
Замените заштићени спецификатор приватним у горњој декларацији изведене класе, на следећи начин:

класаЦхилдЦла: приватноТхеЦла{}

Саставите и покрените програм и имајте на уму да је резултат исти као и раније.

Дакле, када се цела изведена класа прогласи приватном, њени чланови не могу приступити приватним члановима основне класе. Његови чланови, међутим, могу приступити јавним и заштићеним члановима основне класе. Ово је исто као када се изведена класа прогласи заштићеном или јавном.

Јавно изведено предавање са заштићеним члановима
Откуцајте, компајлирајте и покрените следећи програм у коме је заштићена цела изведена класа, а заштићени су и њени чланови. Неки сегменти кода су следећи:

#инцлуде
Користећи именски просторсати;

класаТхеЦла
{
јавности:
интнум1= 10;
заштићен:
интнум2= двадесет;
приватно:
интнум3= 30;
};

класаЦхилдЦла: јавностиТхеЦла
{
заштићен:
интметода1()
{
повратакнум1;
}
интметход2()
{
повратакнум2;
}
/*инт метход3 ()
{
ретурн нум3;
} * /

};

интглавни()
{
/*ЦхилдЦла цхилдОбј;
инт но1 = цхилдОбј.метход1 ();
цена<
/*инт но2 = цхилдОбј.метход2 ();
цена<
повратак 0;
}

Програм ради такав какав јесте. Не постоји излаз, нити би требао бити излаз, на основу начина на који је програм откуцан.

Сада, уклоните коментар из дефиниције функције, метход3 (), у изведеној класи. Ако покушате компајлирати програм, имајте на уму да се он неће компајлирати, дајући поруку о грешци. То значи да приватном члану није могуће приступити из спољне функције, спољног оператора или изведене класе. Ово је исти закључак који је горе закључен, а односи се на приступ приватном члану.

Белешка : заштићени члан заштићене изведене класе може приступити заштићеном члану основне класе.

Сада, вратите коментаре назад у изведену класу и уклоните коментар из првог сегмента кода у функцији маин (). Ако покушате компајлирати програм, имајте на уму да се програм неће компајлирати због првог сегмента кода у функцији маин (). Овај ефекат није нов. Осим изведене класе, спољних функција и спољних оператора, заштићени и приватни чланови (основне или изведене) класе су истог спецификатора, приватни. Функција маин () заштићени члан било које класе, било основне или изведене, према истом спецификатору, сматра приватним и забрањен јој је приступ.

Ако се други сегмент кода главне () функције не коментира, примијенит ће се исто објашњење. То јест, функција маин () неће моћи приступити заштићеном или приватном члану изведене класе или основне класе. Ово је независно од тога да ли заштићени члан изведене класе може приступити заштићеном члану основне класе.

Заштићена изведена класа са заштићеним члановима
Замените јавни спецификатор са заштићеним у декларацији изведене класе изнад, на следећи начин:

класаЦхилдЦла: заштићенТхеЦла{}

Вратите коментар сегмената кода натраг у функцију маин (), ако то већ није учињено. Преведите и покрените програм и имајте на уму да је резултат исти као и раније.

Приватни изведени час са заштићеним члановима
Замените заштићени спецификатор приватним у горњој декларацији изведене класе, на следећи начин:

класаЦхилдЦла: приватноТхеЦла

Саставите и покрените програм и имајте на уму да ће резултат бити као и раније.

Јавно изведено предавање са приватним члановима
Замените приватни спецификатор са јавним у декларацији изведене класе изнад, на следећи начин:

класаЦхилдЦла: јавностиТхеЦла{}

Учините чланове изведене класе приватним. Саставите и покрените програм. Резултат се не разликује од случаја Јавна изведена класа са заштићеним члановима.

Заштићена изведена класа са приватним члановима
Замените јавни спецификатор са заштићеним у декларацији изведене класе изнад, на следећи начин:

класаЦхилдЦла: заштићенТхеЦла{}

Саставите и покрените програм. Овај резултат се не разликује од случаја Заштићена изведена класа са заштићеним члановима.

Приватни изведени час са приватним члановима
Замените заштићени спецификатор приватним у горњој декларацији изведене класе, на следећи начин:

класаЦхилдЦла: приватноТхеЦла{}

Саставите и покрените програм. Овај резултат се не разликује од случаја Приватна изведена класа са заштићеним члановима.

Закључак

Спецификатори приступа Ц ++ су речи приватно, заштићено и јавно. Они одлучују о приступу за чланове класе. Регион спецификатора приступа почиње од његове ознаке, до краја описа класе (дефиниције) или до почетка другог спецификатора приступа. Сваки члан класе може приступити било ком другом члану исте класе. Приватном члану класе не може приступити било која спољна функција, било који спољни оператор или изведена класа.

Члан основне класе мора бити заштићен тако да члану изведене класе може приступити приватни члан основне класе. Овај заштићени члан основне класе спољна функција или спољни оператор посматрају као приватног члана основне класе.

Јавном члану класе може се приступити било којом спољном функцијом, било којим спољним оператором или изведеном класом.

У одсуству било ког спецификатора приступа у класи, претпоставља се приватни спецификатор. То јест, подразумевани спецификатор приступа је приватан.

Референце кориштене у овом раду