Tilgangsmodifikatorer i C++
Tilgangsmodifikatorer er spesielle nøkkelord i C++ som kontrollerer synligheten til klassemedlemmer (data og funksjoner).
De hjelper til med å implementere dataskjul ved å begrense eller tillate tilgang til visse deler av en klasse.
La oss diskutere det en etter en
1. Offentlig spesifikasjoner
Public specifier gjør klassemedlemmer (variabler og funksjoner) tilgjengelige fra hvor som helst - innenfor klassen utenfor klassen eller til og med andre filer.
2. Privat spesifiser
Private specifier gjør klassemedlemmer tilgjengelige kun inne i selve klassen (hovedsakelig medlemsmetoder) og brukes hovedsakelig til å skjule data fra utsiden slik at vi kan gjøre endringer internt senere uten å endre koden til brukerne. Som standard er alle klassemedlemmer i C++ private hvis ingen spesifikasjoner er nevnt.
CPP #include using namespace std ; class Employee { private : // salary and empId cannot be accessed // from outside the Class double salary ; int empID ; public : string name ; // Name can be accessed anywhere Employee ( string n double s int id ) { name = n ; salary = s ; empID = id ; } }; int main () { Employee emp ( 'Fedrick' 50000 101 ); cout < < 'Name: ' < < emp . name < < endl ; return 0 ; }
Produksjon
Name: Fedrick
Hva skjer hvis vi prøver å få tilgang til private medlemmer?
Koden gir kompilatorfeil som vi kan se nedenfor.
C++ #include using namespace std ; class Employee { private : double salary ; int empID ; public : string name ; // Constructor Employee ( string n double s int id ) { name = n ; salary = s ; empID = id ; } }; int main () { Employee emp ( 'Fedrick' 50000 101 ); cout < < emp . salary < < endl ; return 0 ; }
Produksjon
compilation error
prog.cpp: In function ‘int main()’:
prog.cpp:22:17: error: ‘double Employee::salary’ is private within this context
cout < < emp.salary < < endl;
^~~~~~
prog.cpp:6:12: note: declared private here
double salary;
^~~~~~3. Beskyttet spesifikasjoner
- Den beskyttede spesifikasjonen gjør medlemmene tilgjengelige i selve klassen og i dens avledet (barne)klasser, men ikke utgjør utenfor kode.
- Det brukes hovedsakelig i arv, slik at barneklasser kan gjenbruke eller endre data og funksjoner mens de fortsatt holdes skjult for omverdenen.
#include using namespace std ; class Employee { private : double salary ; protected : int empID ; public : string name ; Employee ( string n double s int id ) { name = n ; salary = s ; empID = id ; } }; // Derived class (inherits from Employee) class Manager : public Employee { public : Manager ( string n double s int id ) : Employee ( n s id ) {} void showDetails () { cout < < 'Manager Name: ' < < name < < endl ; cout < < 'Manager ID: ' < < empID < < endl ; } }; int main () { Employee emp ( 'Fedrick' 50000 101 ); cout < < 'Employee Name: ' < < emp . name < < endl ; Manager m ( 'Rohit' 70000 102 ); m . showDetails (); return 0 ; }
Produksjon
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Lag quizNote : Denne tilgangen gjennom arv kan endre tilgangsmodifikatoren til elementene i basisklassen i avledet klasse avhengig av modus for arv .