Adgangsmodifikatorer i C++

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.

typer_adgangsmodifikator

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.
CPP
   #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  


Note : Denne adgang gennem nedarvning kan ændre adgangsmodifikatoren for elementerne i basisklassen i afledt klasse afhængigt af arvemåde .

Opret quiz