Pasiekite modifikatorius C++
Prieigos modifikatoriai yra specialius raktinius žodžius C++ kalba, kuri kontroliuoja klasės narių (duomenų ir funkcijų) matomumą.
Jie padeda įgyvendinti duomenų slėpimą, apribodami arba suteikdami prieigą prie tam tikrų klasės dalių.
Aptarkime tai po vieną
1. Viešasis specifikatorius
Viešasis specifikatorius leidžia pasiekti klasės narius (kintamuosius ir funkcijas) iš bet kurios vietos – klasės viduje, už klasės ribų ar net kitų failų.
2. Privatus Specifikatorius
Privatus specifikatorius leidžia klasės narius pasiekti tik pačioje klasėje (daugiausia narių metodai) ir daugiausia naudojamas duomenims paslėpti iš išorės, kad vėliau galėtume atlikti pakeitimus viduje, nekeisdami jos vartotojų kodo. Pagal numatytuosius nustatymus visi klasės nariai C++ yra privatūs, jei nepaminėtas joks specifikatorius.
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 ; }
Išvestis
Name: Fedrick
Kas nutiks, jei bandysime pasiekti privačius narius?
Kodas pateikia kompiliatoriaus klaidą, kaip matome toliau.
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 ; }
Išvestis
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. Apsaugotas specifikatorius
- Apsaugotas specifikatorius leidžia pasiekti narius pačioje klasėje ir joje išvestinė (vaikų) klasėse, bet nesudaro išorinio kodo.
- Jis daugiausia naudojamas paveldėjimui, leidžiantis vaikų klasėms pakartotinai naudoti arba modifikuoti duomenis ir funkcijas, tuo pačiu išlaikant juos paslėptus nuo išorinio pasaulio.
#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 ; }
Išvestis
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Sukurti viktorinąPastaba : ši prieiga per paveldėjimą gali pakeisti bazinės klasės elementų prieigos modifikatorių išvestinėje klasėje, atsižvelgiant į paveldėjimo būdas .