Obra: Programar em C++/Friend
Matéria: Matemática
friend functions que friend um atributo especial de acesso classes com ele declaramos que uma função amiga de uma classe qual não pertence declarando que uma função externa classe friend dentro de uma classe permite que função amiga possa ler manipular membros variáveis funções membro private privados protected protegidos claro public publicas mas isso já era permitido antes de serem friends considerando que acesso membros pode ser restrito para determinadas partes do código podemos adotar uma postura mais flexível para funções que conhecemos como confiáveis evitar os inconvenientes da restrição membros por códigos que não provoquem problemas maiores nossa estrutura da aplicação declarar funções friend processo para fazer com que funções fora do escopo da classe tenham acesso membros sem nenhuma restrição muito simples para isto apenas temos de colocar protótipo da função externa dentro da classe precedido da palavra friend desta forma compilador passa ignorar os atributos de restrição de acesso da classe quando função acessa membros da mesma vamos ao exemplo friend functions include using namespace std class crectangle int width height public void set_values int int int area return width height friend crectangle duplicate crectangle void crectangle set_values int int width height crectangle duplicate crectangle rectparam crectangle rectres rectres width rectparam width rectres height rectparam height return rectres int main crectangle rect rectb rect set_values rectb duplicate rect cout uso de funções amigas deve ser evitado sempre que possível pois diminui identidade da orientação objetos isto ocorre porque uso desse mecanismo representa uma quebra no encapsulamento quando passamos permitir que funções tenham acesso membros restritos dos objetos fazemos com que agentes externos interfiram na autonomia dos mesmos isto pode dificultar análise de programas muito extensos no caso da criação de procedimentos que tem finalidade de modificar conteúdo do objeto explicitamente como nos casos de operadores modificadores de comportamento podemos usar as funções amigas friends para esta finalidade tomando os devidos cuidados para torná las muito bem restritas as funções que devem executar muito importante observar se estas funções alteram dados dentro dos objetos que não podem ser modificados se as devidas precauções forem tomadas não haverá problemas no uso de funções friend friend classes da mesma forma que podemos declarar funções como amigas de uma determinada classe podemos declarar outra classe como sua amiga este artifício faz com que os membros da classe onde foi feita declaração sejam acessíveis declarada assim segunda classe passa ter possibilidade de manipulação livre dos membros da outra apesar da funcionalidade ser um pouco semelhante que temos no uso das funções quando declaramos uma classe como friend dentro de outra teremos todas as funções da primeira com poderes de acesso aos membros da segunda esta característica requer cuidado redobrado
a primeira com poderes de acesso aos membros da segunda esta característica requer cuidado redobrado quando operações da classe friend interferem no conteúdo da outra friend class include using namespace std class csquare class crectangle int width height public int area return width height void convert csquare consigo acessar porque friend class csquare private int side public void set_side int side friend class crectangle declaro friend class void crectangle convert csquare width side height side int main csquare sqr crectangle rect sqr set_side rect convert sqr cout nota não há propriedade de reciprocidade ou reversão facto de uma função ou classe ser friend de uma classe não implica contrário ou seja ter como friend não implica que tenha em mesma conta outra propriedade que não há transitividade se numa class for declarado que class friend depois que na classe estiver declarado que classe friend de isto não implica que seja friend de