Funkcja przyjaciela

W programowaniu obiektowym funkcja zaprzyjaźniona , czyli „przyjaciel” danej klasy , jest funkcją, która ma taki sam dostęp jak metody do danych prywatnych i chronionych .

Funkcja zaprzyjaźniona jest deklarowana przez klasę, która przyznaje dostęp, więc funkcje zaprzyjaźnione są częścią interfejsu klasy, podobnie jak metody. Funkcje zaprzyjaźnione pozwalają alternatywnej składni używać obiektów, na przykład f(x) zamiast xf() lub g(x,y) zamiast xg(y) . Funkcje zaprzyjaźnione mają taki sam wpływ na enkapsulację jak metody.

Podobną koncepcją jest klasa przyjaciół .

Przypadków użycia

Podejście to można zastosować w funkcji przyjaznej, gdy funkcja potrzebuje dostępu do danych prywatnych w obiektach z dwóch różnych klas. Można to osiągnąć na dwa podobne sposoby

  • funkcja o zasięgu globalnym lub przestrzeni nazw może być zadeklarowana jako przyjaciel obu klas
  • funkcja składowa jednej klasy może być zadeklarowana jako przyjaciel innej.
 
  
 
  
  
  
         0
  
          
            

 
  
  
         
   
            
            

 

     
      
        
        

 

     
      
        
        

 
  
    
    
 
   
   
 #include  <iostream>  używając  przestrzeni nazw  std  ;  klasa  Foo  ;  // Deklaracja przekazania klasy Foo w celu np. kompilacji.  klasa  Słupek  {  prywatny  :  int  a  =  ;  public  :  void  show  (  Bar  &  x  ,  Foo  &  y  );  pokaz  nieważnych  znajomych  (  Bar  &  x  ,  Foo  &  y  );  // deklaracja globalnego przyjaciela  };  klasa  Foo  {  prywatna  :  int  b  =  6  ;  publiczne  :  pokaz  nieważnych  znajomych  (  Bar  &  x  ,  Foo  &  y  );  // deklaracja przyjaciela globalnego przyjaciela  void  Bar  ::show  (  Bar  &  x  ,  Foo  &  y  );  // deklaracja znajomego z innej klasy  };  // Definicja funkcji składowej Bar; ten członek jest znajomym Foo   void  Bar::show  (  Bar  &  x  ,  Foo  &  y  )  {  cout  <<  "Pokaż przez członka funkcji Bar"  <<  endl  ;  cout  <<  "Słupek::a = "  <<  x  .  a  <<  koniec  ;  cout  <<  "Foo::b = "  <<  y  .  b  <<  koniec  ;  }  // Znajomy dla Bar i Foo, definicja funkcji globalnej  void  show  (  Bar  &  x  ,  Foo  &  y  )  {  cout  <<  "Pokaż przez funkcję globalną"  <<  endl  ;  cout  <<  "Słupek::a = "  <<  x  .  a  <<  koniec  ;  cout  <<  "Foo::b = "  <<  y  .  b  <<  koniec  ;  }  int  main  ()  {  Pasek  a  ;  Foo  b  ;  pokaż  (  a  ,  b  );  za  .  pokaż  (  a  ,  b  );  } 

Linki zewnętrzne