Modyfikatory dostępu w C++
Modyfikatory dostępu to specjalne słowa kluczowe w C++, które kontrolują widoczność członków klasy (danych i funkcji).
Pomagają we wdrażaniu ukrywania danych, ograniczając lub zezwalając na dostęp do niektórych części klasy.
Omówmy to jeden po drugim
1. Specyfikator publiczny
Specyfikator publiczny sprawia, że elementy klasy (zmienne i funkcje) są dostępne z dowolnego miejsca - wewnątrz klasy, poza klasą lub nawet innymi plikami.
2. Specyfikator prywatny
Specyfikator prywatny sprawia, że członkowie klasy są dostępni tylko wewnątrz samej klasy (głównie metody składowe) i służy głównie do ukrywania danych z zewnątrz, dzięki czemu możemy później wprowadzać zmiany wewnętrznie bez zmiany kodu użytkowników. Domyślnie wszyscy członkowie klasy w C++ są prywatnymi, jeśli nie podano żadnego specyfikatora.
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 ; }
Wyjście
Name: Fedrick
Co się stanie, jeśli spróbujemy uzyskać dostęp do członków prywatnych?
Kod daje błąd kompilatora, jak widać poniżej.
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 ; }
Wyjście
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. Chroniony specyfikator
- Specyfikator chroniony sprawia, że elementy członkowskie są dostępne wewnątrz samej klasy i w jej obrębie pochodny (podrzędne) klasy, ale nie tworzą kodu zewnętrznego.
- Stosowany jest głównie w dziedziczeniu, umożliwiając klasom podrzędnym ponowne wykorzystanie lub modyfikację danych i funkcji, jednocześnie utrzymując je w ukryciu przed światem zewnętrznym.
#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 ; }
Wyjście
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Utwórz quizNotatka : Ten dostęp poprzez dziedziczenie może zmienić modyfikator dostępu elementów klasy bazowej w klasie pochodnej w zależności od tryb dziedziczenia .