Ц ++

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

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

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

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

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

Јавни и приватни подаци

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

#инцлуде
коришћење простора имена стд;
класа ТхеЦла

приватни:
инт нум1;
инт нум2;
јавно:
ТхеЦла (инт н1, инт н2)

нум1 = н1; нум2 = н2;

инт метода ()

ретурн нум1;

;
инт маин ()

ТхеЦла обј (10, 20);
инт бр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 = 20;
приватни:
инт нум3 = 30;
;
разред ЦхилдЦла: јавни ТхеЦла

јавно:
инт метход1 ()

ретурн нум1;

инт метход2 ()

ретурн нум2;

/ * инт метход3 ()

ретурн нум3;
* /
;
инт маин ()

ЦхилдЦла цхилдОбј;
инт бр1 = детеОбј.метход1 ();
цоут<инт бр2 = детеОбј.метход2 ();
цоут<ретурн 0;

Излаз је:
10
20

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

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

класа ЦхилдЦла: јавни ТхеЦла

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#инцлуде
коришћење простора имена стд;
класа ТхеЦла

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

заштићено:
инт метход1 ()

ретурн нум1;

инт метход2 ()

ретурн нум2;

/ * инт метход3 ()

ретурн нум3;
* /
;
инт маин ()

/ * ЦхилдЦла цхилдОбј;
инт бр1 = детеОбј.метход1 ();
цоут</ * инт бр2 = детеОбј.метход2 ();
цоут<ретурн 0;

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

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

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

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

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

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

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

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

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

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

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

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

класа ЦхилдЦла: јавни ТхеЦла

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

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

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

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

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

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

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

Закључак

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

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

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

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

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

  • Алиреза Ебрахими, НАСЛЕЂЕ: ПОНОВНА УПОТРЕБЉИВОСТ И ПРОШИРИВОСТ
  • С. Малик, Структуре података који користе Ц ++ 2. издање
Топ 5 ергономских производа за рачунарски миш за Линук
Да ли дуготрајна употреба рачунара изазива бол у зглобу или прстима? Патите ли од укочених зглобова и стално морате да се рукујете? Да ли осећате гору...
Како променити поставке миша и додирне табле помоћу Ксинпут-а у Линук-у
Већина Линук дистрибуција подразумевано испоручује библиотеку „либинпут“ за обраду улазних догађаја на систему. Може да обрађује улазне догађаје и на ...
Замените тастере миша другачије за различити софтвер помоћу Кс-Моусе Буттон Цонтрол
Можда вам је потребан алат који би могао да промени контролу миша са сваком апликацијом коју користите. Ако је то случај, можете испробати апликацију ...