Toegang tot modificatoren in C++
Toegangsmodificatoren zijn speciale trefwoorden in C++ die de zichtbaarheid van klasseleden (gegevens en functies) regelen.
Ze helpen bij het implementeren van het verbergen van gegevens door de toegang tot bepaalde delen van een klas te beperken of toe te staan.
Laten we het één voor één bespreken
1. Publieke specificatie
De openbare specificatie maakt klasseleden (variabelen en functies) overal toegankelijk - binnen de klasse, buiten de klasse of zelfs in andere bestanden.
2. Privéspecificatie
De privéspecificatie maakt klasseleden alleen toegankelijk binnen de klasse zelf (voornamelijk lidmethoden) en wordt voornamelijk gebruikt om gegevens van buitenaf te verbergen, zodat we later intern wijzigingen kunnen aanbrengen zonder de code van de gebruikers te wijzigen. Standaard zijn alle klasseleden in C++ privé als er geen specificatie wordt vermeld.
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 ; }
Uitvoer
Name: Fedrick
Wat gebeurt er als we proberen toegang te krijgen tot privéleden?
De code geeft een compilerfout, zoals we hieronder kunnen zien.
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 ; }
Uitvoer
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. Beschermde specificatie
- De beschermde specificatie maakt leden toegankelijk binnen de klasse zelf en in de klasse zelf afgeleid van (kind)klassen maar geen buitencode vormen.
- Het wordt voornamelijk gebruikt bij overerving, waardoor onderliggende klassen gegevens en functies kunnen hergebruiken of wijzigen, terwijl ze nog steeds verborgen blijven voor de buitenwereld.
#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 ; }
Uitvoer
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Quiz makenOpmerking : Deze toegang via overerving kan de toegangsmodificator van de elementen van de basisklasse in de afgeleide klasse veranderen, afhankelijk van de wijze van erfenis .