Modificadors d'accés en C++
Els modificadors d'accés són paraules clau especials en C++ que controlen la visibilitat dels membres de la classe (dades i funcions).
Ajuden a implementar l'ocultació de dades restringint o permetent l'accés a determinades parts d'una classe.
Comentem-ho un per un
1. Especificador públic
L'especificador públic fa que els membres de la classe (variables i funcions) siguin accessibles des de qualsevol lloc: dins de la classe fora de la classe o fins i tot altres fitxers.
2. Especificador privat
L'especificador privat fa que els membres de la classe siguin accessibles només dins de la mateixa classe (principalment mètodes de membres) i s'utilitza principalment per ocultar dades des de l'exterior perquè puguem fer canvis internament més tard sense canviar el codi dels seus usuaris. Per defecte, tots els membres de la classe en C++ són privats si no s'esmenta cap especificador.
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 ; }
Sortida
Name: Fedrick
Què passa si intentem accedir a membres privats?
El codi dóna un error del compilador com podem veure a continuació.
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 ; }
Sortida
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. Especificador protegit
- L'especificador protegit fa que els membres siguin accessibles dins de la pròpia classe i en la seva derivats classes (infantils), però no formen codi extern.
- S'utilitza principalment en l'herència, permetent que les classes fills puguin reutilitzar o modificar dades i funcions, mantenint-les ocultes del món exterior.
#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 ; }
Sortida
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Crea un qüestionariNota : Aquest accés mitjançant herència pot alterar el modificador d'accés dels elements de classe base en classe derivada en funció de la modalitat d'herència .