Toegang tot modificatoren in C++

Toegang tot modificatoren in C++

Toegangsmodificatoren zijn speciale trefwoorden in C++ die de zichtbaarheid van klasseleden (gegevens en functies) regelen.
Ze helpen bij het implementeren van het verbergen van gegevens door de toegang tot bepaalde delen van een klas te beperken of toe te staan.

types_of_access_modifier

Laten we het één voor één bespreken

1. Publieke specificatie

De openbare specificatie maakt klasseleden (variabelen en functies) overal toegankelijk - binnen de klasse, buiten de klasse of zelfs in andere bestanden.

2. Privéspecificatie

De privéspecificatie maakt klasseleden alleen toegankelijk binnen de klasse zelf (voornamelijk lidmethoden) en wordt voornamelijk gebruikt om gegevens van buitenaf te verbergen, zodat we later intern wijzigingen kunnen aanbrengen zonder de code van de gebruikers te wijzigen. Standaard zijn alle klasseleden in C++ privé als er geen specificatie wordt vermeld.

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  ;   }   

Uitvoer
Name: Fedrick  

Wat gebeurt er als we proberen toegang te krijgen tot privéleden?

De code geeft een compilerfout, zoals we hieronder kunnen zien.

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  ;   }   

Uitvoer

 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. Beschermde specificatie

  • De beschermde specificatie maakt leden toegankelijk binnen de klasse zelf en in de klasse zelf afgeleid van (kind)klassen maar geen buitencode vormen.
  • Het wordt voornamelijk gebruikt bij overerving, waardoor onderliggende klassen gegevens en functies kunnen hergebruiken of wijzigen, terwijl ze nog steeds verborgen blijven voor de buitenwereld.
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  ;   }   

Uitvoer
Employee Name: Fedrick Manager Name: Rohit Manager ID: 102  


Opmerking : Deze toegang via overerving kan de toegangsmodificator van de elementen van de basisklasse in de afgeleide klasse veranderen, afhankelijk van de wijze van erfenis .

Quiz maken