Adgangsmodifikatorer i C++
Adgangsmodifikatorer er særlige søgeord i C++, der styrer synligheden af klassemedlemmer (data og funktioner).
De hjælper med at implementere dataskjul ved at begrænse eller tillade adgang til visse dele af en klasse.
Lad os diskutere det én efter én
1. Offentlig specifikation
Offentlig specifier gør klassemedlemmer (variabler og funktioner) tilgængelige fra hvor som helst - inde i klassen uden for klassen eller endda andre filer.
2. Privat Specifikator
Private specifier gør klassemedlemmer kun tilgængelige inde i selve klassen (hovedsageligt medlemsmetoder) og bruges hovedsageligt til at skjule data udefra, så vi kan foretage ændringer internt senere uden at ændre koden for dens brugere. Som standard er alle klassemedlemmer i C++ private, hvis ingen specificator er nævnt.
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 ; }
Produktion
Name: Fedrick
Hvad sker der, hvis vi forsøger at få adgang til private medlemmer?
Koden giver compiler fejl, som vi kan se nedenfor.
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 ; }
Produktion
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. Beskyttet specifikator
- Den beskyttede specifikation gør medlemmer tilgængelige i selve klassen og i dens afledt (barne)klasser, men udgør ikke ekstern kode.
- Det bruges hovedsageligt i arv, hvilket giver børneklasser mulighed for at genbruge eller ændre data og funktioner, mens de stadig holdes skjult for omverdenen.
#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 ; }
Produktion
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102
Opret quizNote : Denne adgang gennem nedarvning kan ændre adgangsmodifikatoren for elementerne i basisklassen i afledt klasse afhængigt af arvemåde .