Usando o friend em C++

Publicado por Fabio Junior Sabai em 13/12/2004

[ Hits: 15.254 ]

 


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

Encontrando erros em C/C++ com Valgrind

Pressionar tecla e não precisar pressionar ENTER

Configurando Ctrl+Alt+[tecla] para desligar o computador

Usando o realloc

Classes para vários tipos (templates)

Leitura recomendada

Classes para vários tipos (templates)

Site com questões de programação

Getchar(); sendo ignorado? Não mais!

Error: C compiler cannot create executables (solucionado)

stty: alternativa para echo e noecho

  

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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts