Думата достъп означава да прочетете или промените стойността на променлива, а също така означава да използвате функция. Спецификаторите за достъп на C ++ са думите „частен“, „защитен“ и „публичен“.”Те решават дали даден член може да осъществи достъп до други членове на своя клас или функция или оператор извън класа, който не принадлежи към класа, може да осъществи достъп до който и да е член на класа. Те също така решават дали член на производен (дъщерен) клас може да има достъп до член на родителски клас.
За разбиране на тази статия и за тестване на предоставения код са необходими основни познания по C ++.
Съдържание на статията
- Публичните и частните спецификатори
- Защитеният спецификатор
- Производни спецификатори на класа и членове
- Заключение
Публичните и частните спецификатори
Клас
Всеки член на клас може да има достъп до всеки друг член на същия клас, независим от който е означен като „публичен“ или „частен“.”Обмислете следната програма:
използване на пространство от имена std;
клас TheCla
частно:
int num1;
int num2;
публично:
TheCla (int n1, int n2)
num1 = n1; num2 = n2;
метод int ()
връщане num1;
;
int main ()
TheCla obj (10, 20);
int no2 = obj.метод ();
Cout<
връщане 0;
Изходът е 10. Частните членове са num1 и num2. Публичните членове са TheCla () и метод (). Имайте предвид, че TheCla () е конструкторната функция, която инициализира променливи от интерес. Регионът на спецификатора за достъп започва от неговия етикет до края на описанието на класа (дефиниция) или до началото на друг спецификатор за достъп.
Във функцията main () първият оператор е екземпляр, включващ конструкторската функция, която инициализира num1 и num2. Следващото изявление извиква публичния член, метод () на класа.
Сега, в описанието на класа (дефиниция), публичната функция член, TheCla (), осъществява достъп до частните членове, num1 и num2. Също така функцията на публичния член, метод (), осъществява достъп до частния член, num1. Всеки член в описанието на класа може да има достъп до всеки друг член в същото описание на класа; няма значение кой член е частен или публичен.
Функция или оператор, които не са декларирани в описанието на класа и извън описанието на класа, могат да имат достъп само до публични членове на класа. Функцията main () например е функция, декларирана извън описанието на класа. Той е имал достъп само до метода () и публичните членове на TheCla (). Вътре в основната () функция, функцията TheCla () е obj (10, 20).
Външна функция или външен оператор, като например функцията main (), не може да осъществи достъп до някой от частните членове на класа, като num1 или num2. Премахнете индикатора за коментар, //, от последното твърдение в main (). Ако се опитвате да компилирате програмата, имайте предвид, че програмата няма да се компилира, което ще даде съобщение за грешка.
Спецификатор по подразбиране
Спецификаторът по подразбиране за клас е „private.”И така, горното описание на класа е същото като следващото описание, частно, но без спецификатора:
int num1;
int num2;
публично:
TheCla (int n1, int n2)
num1 = n1; num2 = n2;
метод int ()
връщане num1;
;
Забележка: етикетът на спецификатора за достъп започва с спецификатора и след това е последван от двоеточие.
Защитеният спецификатор
В рамките на описание на класа и от външна функция или външен оператор защитеният спецификатор е същият като частния спецификатор. Сега заменете частния спецификатор в горната програма със спецификатора, защитете и премахнете индикатора за коментар, //, от последния израз, но в функцията main (). Ако се опитвате да компилирате програмата, имайте предвид, че програмата няма да се компилира, което ще даде съобщение за грешка.
Проблемът със защитения спецификатор възниква, когато членовете на производния (наследен) клас трябва да имат достъп до членовете на базовия (родителския) клас.
Публичен производен клас с публични членове
Обмислете следната програма:
използване на пространство от имена std;
клас TheCla
публично:
int num1 = 10;
защитени:
int num2 = 20;
частно:
int num3 = 30;
;
клас ChildCla: публичен TheCla
публично:
int method1 ()
връщане num1;
int method2 ()
връщане num2;
/ * метод int3 ()
връщане num3;
* /
;
int main ()
ChildCla childObj;
int no1 = childObj.метод1 ();
Cout<
Cout<
Резултатът е:
10
20
В базовия клас num1 е публичен, num2 е защитен и num3 е частен. В производния клас всички функции на членове са публични. Първата функция, method1 (), осъществява достъп до публичния член с данни, num1. Втората функция, method2 (), осъществява достъп до защитения член с данни, num2. Третата функция, method3 (), макар и понастоящем да е коментирана, трябва да има достъп до члена с частни данни, num3.
Производният клас не се декларира без спецификатор за достъп (публичен, защитен или частен). По-горе производният клас се декларира с публичния спецификатор, т.е
клас ChildCla: публичен TheClaСега премахнете коментара на дефиницията на функцията на трети член в извлечения клас. Ако се опитвате да компилирате програмата, имайте предвид, че тя няма да се компилира, като се появи съобщение за грешка.
Забележка: Когато целият производен клас е обявен за публичен, неговите членове не могат да получат достъп до частните членове на базовия клас. Членовете му обаче могат да имат достъп до обществените и защитени членове на базовия клас. Горната програма илюстрира това.
Имайте предвид обаче, че публичен член на публично извлечения клас може да осъществи достъп до защитен член на базовия клас.
Производни спецификатори на класа и членове
Защитен производен клас с публични членове
Заменете спецификатора „public“ с „protected“ в декларацията на производния клас по-горе, както следва:
Компилирайте и стартирайте програмата и отбележете, че резултатът е същият както преди.
Така че, когато целият производен клас е обявен за защитен, неговите членове не могат да получат достъп до частните членове на базовия клас. Членовете му обаче могат да имат достъп до обществените и защитени членове на базовия клас. Това е същото като когато производният клас е обявен за публичен.
Забележка: защитен член на публично извлечения клас има достъп до защитен член на основния клас.
Частен производен клас с публични членове
Заменете спецификатора „protected“ с „private“ в декларацията на производния клас по-горе, както следва:
Компилирайте и стартирайте програмата и обърнете внимание, че резултатът е същият както преди.
Така че, когато целият производен клас е обявен за частен, неговите членове не могат да получат достъп до частните членове на базовия клас. Членовете му обаче могат да имат достъп до обществените и защитени членове на базовия клас. Това е същото като когато производният клас е обявен за защитен или публичен.
Публичен производен клас със защитени членове
Въведете, компилирайте и изпълнете следната програма, в която е защитен целият производен клас и неговите членове също са защитени. Някои кодови сегменти са както следва:
използване на пространство от имена std;
клас TheCla
публично:
int num1 = 10;
защитени:
int num2 = 20;
частно:
int num3 = 30;
;
клас ChildCla: публичен TheCla
защитени:
int method1 ()
връщане num1;
int method2 ()
връщане num2;
/ * метод int3 ()
връщане num3;
* /
;
int main ()
/ * ChildCla childObj;
int no1 = childObj.метод1 ();
Cout<
Cout<
Програмата работи такава, каквато е. Няма изход и не трябва да има изход въз основа на начина, по който е набрана програмата.
Сега премахнете коментара на дефиницията на функцията, method3 (), в производния клас. Ако се опитвате да компилирате програмата, имайте предвид, че тя няма да се компилира, като се появи съобщение за грешка. Това означава, че частен член не може да бъде достъпен от външна функция, външен оператор или производен клас. Това е същото заключение, както беше направено по-горе, относно достъпа до частен член.
Забележка: защитен член на защитения производен клас има достъп до защитен член на основния клас.
Сега поставете коментарите обратно в производния клас и премахнете коментара за първия кодов сегмент във функцията main (). Ако се опитвате да компилирате програмата, имайте предвид, че програмата няма да се компилира поради първия кодов сегмент във функцията main (). Този ефект не е нов. Освен производния клас, външните функции и външните оператори, защитените и частни членове на (основен или производен) клас са от същия спецификатор, private. Функцията main () вижда защитения член на който и да е клас, независимо дали е основен или производен, от същия спецификатор, частен и му е забранен достъпът до него.
Ако вторият кодов сегмент на функцията main () е без коментар, ще се прилага същото обяснение. Тоест, функцията main () няма да има достъп до защитен или частен член на производния клас или на базовия клас. Това е независимо от това дали защитен член на производния клас може да има достъп до защитен член на основния клас.
Защитен производен клас със защитени членове
Заменете спецификатора „public“ с „protected“ в декларацията на производния клас по-горе, както следва:
Поставете коментара на кодовите сегменти обратно във функцията main (), ако това още не е направено. Компилирайте и стартирайте програмата и отбележете, че резултатът е както преди.
Частен производен клас със защитени членове
Заменете спецификатора „protected“ с „private“ в декларацията на производния клас по-горе, както следва:
Компилирайте и стартирайте програмата и отбележете, че резултатът ще бъде както преди.
Публичен производен клас с частни членове
Заменете спецификатора „private“ с „public“ в декларацията на производния клас по-горе, както следва:
Направете членовете на производния клас частни. Компилирайте и стартирайте програмата. Резултатът не се различава от случая „Публичен производен клас със защитени членове“.
Защитен производен клас с частни членове
Заменете спецификатора „public“ с „protected“ в декларацията на производния клас по-горе, както следва:
Компилирайте и стартирайте програмата. Този резултат не се различава от случая „Защитен производен клас със защитени членове“.
Частен производен клас с частни членове
Заменете спецификатора „protected“ с „private“ в декларацията на производния клас по-горе, както следва:
Компилирайте и стартирайте програмата. Този резултат не се различава от случая „Частен производен клас със защитени членове“.
Заключение
Спецификаторите за достъп на C ++ са думите „частен“, „защитен“ и „публичен“.”Те решават достъпа на членовете на клас. Областта на спецификатора за достъп започва от неговия етикет, до края на описанието на класа (дефиниция) или до началото на друг спецификатор за достъп. Всеки член на клас може да има достъп до всеки друг член на същия клас. Частен член на клас не може да бъде достъпен от външна функция, външен оператор или производен клас.
Членът на базовия клас трябва да бъде защитен, за да може частният член на базовия клас да бъде достъпен от член на производния клас. Този защитен член на базовия клас се разглежда като частен член на базовия клас от външна функция или външен оператор.
Публичен член на клас може да бъде достъпен от всяка външна функция, всеки външен оператор или производен клас.
При липса на спецификатор за достъп в клас се приема частният спецификатор. Тоест, спецификаторът за достъп по подразбиране е частен.
Препратки, използвани в тази работа
- Алиреза Ебрахими, НАСЛЕДСТВО: ПОВТОРНОСТ И РАЗШИРЯЕМОСТ
- С. Malik, Структури на данни, използващи C ++ 2-ро издание