Modifikatorji dostopa v C++
Modifikatorji dostopa so posebne ključne besede v C++, ki nadzorujejo vidnost članov razreda (podatkov in funkcij).
Pomagajo pri izvajanju skrivanja podatkov tako, da omejujejo ali dovoljujejo dostop do določenih delov razreda.
Razpravljajmo o tem enega za drugim
1. Javni specifikator
Javni specifikator naredi člane razreda (spremenljivke in funkcije) dostopne od koder koli - znotraj razreda zunaj razreda ali celo drugih datotek.
2. Zasebni specifikator
Zasebni specifikator naredi člane razreda dostopne samo znotraj samega razreda (predvsem metode članov) in se v glavnem uporablja za skrivanje podatkov od zunaj, tako da lahko pozneje izvedemo notranje spremembe, ne da bi spremenili kodo njegovih uporabnikov. Privzeto so vsi člani razreda v C++ zasebni, če ni omenjen noben specifikator.
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 ; }
Izhod
Name: Fedrick
Kaj se zgodi, če poskušamo dostopati do zasebnih članov?
Koda daje napako prevajalnika, kot lahko vidimo spodaj.
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 ; }
Izhod
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. Zaščiteni specifikator
- Zaščiteni specifikator naredi člane dostopne znotraj samega razreda in v njegovem izpeljano (otroške) razrede, vendar ne tvorijo zunanje kode.
- Uporablja se predvsem pri dedovanju, ki omogoča podrejenim razredom, da ponovno uporabijo ali spremenijo podatke in funkcije, medtem ko so še vedno skriti pred zunanjim svetom.
#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 ; }
Izhod
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Ustvari kvizOpomba : Ta dostop prek dedovanja lahko spremeni modifikator dostopa elementov osnovnega razreda v izpeljanem razredu, odvisno od način dedovanja .