Usando o friend em C++

Publicado por Perfil removido em 13/12/2004

[ Hits: 17.445 ]

 


Usando o friend em C++



Programar usando orientação objeto significa encapsular num mesmo módulo dados, informações e operações que de alguma forma se relacionam. Porém as vezes é preciso quebrar esse encapsulamento, por algum motivo, seja lá qual for ele. Para isso C++ oferece o operador friend. Ele serve basicamente para dizer para uma classe quais são sua (s) classe(s) amiga(s) (friend == amigo). As classes amigas tem alguns privilégios que as classes não-amigas não tem, como acessar os atributos e métodos private por exemplo. Exemplo:

class teste {
public:
   teste() { priv = 14; };

friend class amiga;
private:
   int priv;
};

class amiga {
public:
   amiga();

   teste t;
   void faz_alguma_coisa() {
      /* a classe amiga é amiga da classe teste e pode acessar
       seus atributos privados */
     t.priv = 10;
   }
};

class nao_amiga {
public:
   nao_amiga();

   teste t;
   void faz_alguma_coisa() {
      /* isso dá erro, porque o atributo priv da classe teste é
       privado e nao_amiga não é amiga de teste*/
     t.priv = 5;
   }
};

Não vejo muita utilidade em friend e particularmente nunca o usei em nenhum dos meus programas. Sempre é possível reorganizar a classe de forma que não seja preciso quebrar o encapsulamento. Mas fica aí a dica se alguém precisar usar.

Outras dicas deste autor

Recuperando ISOs corrompidas com torrent

Instalando WPS Office 2016 no Linux Mint 18

Reconhecendo vídeo "desconhecido" no Debian e derivados

Configurando o xorg.conf no Ubuntu Hardy (8.04)

Ativando o NUMLOCK na tty1 quando ligar o PC automaticamente

Leitura recomendada

Compilando e executando programas em C no Linux

Cursos de C/C++ e outros

Site com questões de programação

Pressionar tecla e não precisar pressionar ENTER

Exibindo código ASCII das teclas

  

Comentários
[1] Comentário enviado por cwars em 14/11/2007 - 10:51h

Esse foi um dos motivos que muitos afirmam que C++ havia se tornado uma linguagem inchada, pois existem muita coisa que quase não tem nenhuma utilidade, além que uma linguagem orientada a objetos (em minha opnião) só tem utilidade rodando em modo gerenciado, ou seja, numa máquina virtual, assim como: Java, Mono, Python, PhP e outra.

Contudo parece que essa moda de inchar a linguagem de coisas inúteis também está invadindo outras linguagens, C# mesmo na sua 3 versão está cheia de coisas sem valor e Java também está seguindo o mesmo caminho, acredito que uma linguagem deve ser como C, simples e prática, sem muitas invenções, mas ainda acho que o C poderia ser mais simples.

[2] Comentário enviado por LucasG1995 em 03/08/2016 - 15:09h

Entao,resumindo,uma classe amiga eh uma segunda classe criada q pode acessar as funcoes da primeira?? No caso,a variavel t eh um objeto da classe amigas capaz de chamar as funcoes membro??? Eh isso msm? Obg



Contribuir com comentário