Diferenças entre edições de "Programar em C++/Friend"

949 bytes adicionados ,  14h40min de 21 de fevereiro de 2009
Considerando que o acesso a 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 e evitar os inconvenientes da restrição a membros por códigos que não provoquem problemas maiores a nossa estrutura da aplicação.
 
== Declarar funções "friend functions "==
 
O processo para fazer com que funções fora do escopo da classe tenham a seus membros
sem nenhuma restriçào é muito simples. Para isto apenas temos de colocar o protótipo da função externa dentro da classe precedido da palavra "friend". Desta forma o compilador passa a ignorar os atributos de restrição de acesso da classe quando a função acessa membros da mesma.
 
Para isto acontecer apenas temos de colocar o protótipo da função externa dentro da classe e colocando antes a palavra friend.
Vamos ao exemplo:
 
</source>
 
O uso de funções amigas deve ser evitado sempre que possível, pois diminui a identidade da orientação a objetos. Isto ocorre porque o uso desse mecanismo representa uma quebra no encapsulamento. Quando passamos a permitir que funções tenham acesso a membros restritos dos objetos fazemos com que agentes externos interfiram na autonomia dos mesmos. Isto pode dificultar a análise de programas muito extensos.
Aconselham o não uso dos friends
 
{| border 1
No caso da criação de procedimentos que tem a finalidade de modificar o conteúdo do objeto explicitamente, como nos casos de operadores e 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".
|Class name CRectangle|| private || || public || ||
|-
| || int width ||int height || void set_values (int, int) || int area () || friend CRectangle duplicate
|-
|rect|| || || || ||
|-
|rectb|| || || || ||
|}
 
== Friend classes ==