friend functions c
Saiba mais sobre funções de amigo em C ++ com exemplos.
C ++ suporta o recurso de encapsulamento no qual os dados são agrupados com as funções que operam neles para formar uma única unidade. Ao fazer isso, o C ++ garante que os dados sejam acessíveis apenas pelas funções que operam neles e não a qualquer pessoa fora da classe.
Este é um dos recursos distintivos do C ++ que preserva os dados e evita que vazem para o mundo exterior.
=> Leia a série de treinamento Easy C ++.
Mas, em alguns aplicativos em tempo real, às vezes podemos querer acessar dados fora da unidade agrupada. Por exemplo, uma classe externa pode desejar acessar dados privados e protegidos de uma classe C ++.
C ++ fornece uma facilidade para acessar dados privados e protegidos por meio de um recurso especial chamado função ou classe “amigo”, que discutiremos aqui neste tutorial.
O que você aprenderá:
- Função Amigo em C ++
- Exemplo de função de amigo
- Classe Amigo
- Vantagens / desvantagens da função de amigo
- Conclusão
- Leitura recomendada
Função Amigo em C ++
Uma função de amigo em C ++ é uma função precedida pela palavra-chave “amigo”. Quando a função é declarada como amiga, ela pode acessar os membros de dados privados e protegidos da classe.
Uma função friend é declarada dentro da classe com uma palavra-chave friend precedendo conforme mostrado abaixo.
class className{ …… friend returnType functionName(arg list); };
Conforme mostrado acima, a função friend é declarada dentro da classe cujos membros de dados privados e protegidos devem ser acessados. A função pode ser definida em qualquer lugar no arquivo de código e não precisamos usar a palavra-chave friend ou a resolução de escopo, operator.
Existem alguns pontos a serem lembrados ao implementar funções de amigo em nosso programa:
- Uma função de amigo pode ser declarada na seção privada ou pública da classe.
- Ele pode ser chamado como uma função normal sem usar o objeto.
- Uma função de amigo não está no escopo da classe, da qual é um amigo.
- Uma função de amigo não é chamada usando o objeto de classe, pois não está no escopo da classe.
- Uma função de amigo não pode acessar os membros de dados privados e protegidos da classe diretamente. Ele precisa fazer uso de um objeto de classe e, em seguida, acessar os membros usando o operador ponto.
- Uma função de amigo pode ser uma função global ou um membro de outra classe.
Exemplo de função de amigo
Vamos implementar um exemplo de programação para entender melhor o uso da função Friend.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< Resultado:
Área = 150
No programa acima, temos um exemplo de classe com comprimento e largura de membros privados. Temos um construtor público que inicializa os valores de comprimento e largura. Em seguida, temos uma função amiga “calcArea” que calcula a área levando em consideração o comprimento e a largura.
Observe que calcArea é uma função amiga e não faz parte da classe. Na função principal, após criar um objeto da amostra da classe, passamos para a função calcArea que calcula a área e exibe o valor.
Classe Amigo
Assim como as funções de amigo, também podemos ter uma aula de amigo. A classe Friend pode acessar membros privados e protegidos da classe da qual é amigo.
class A{ …… friend class B; }; class B{ …….. };
Conforme descrito acima, a classe B é amiga da classe A. Portanto, a classe B pode acessar os membros privados e protegidos da classe A.
Mas isso não significa que a classe A pode acessar membros privados e protegidos da classe B. Observe que a amizade não é mútua, a menos que o façamos.
Da mesma forma, a amizade da classe não é herdada. Isso significa que como a classe B é amiga da classe A, não será amiga das subclasses da classe A.
Tomemos um exemplo de programação para demonstrar a classe friend.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< Resultado:
Área = 150
programa java para classificar uma matriz
Neste programa, temos duas classes. A classe “Área” que calcula a área usando os parâmetros de comprimento e largura. Observe que os campos, área, comprimento e largura são todos membros privados da classe Área.
A próxima classe que é usada é a “printClass” que imprime a área calculada por uma função calcArea na classe Area. Como os membros são privados, precisamos tornar printClass um amigo da classe Area.
Feito isso, na função principal criamos um objeto da classe Area, calculamos a área e passamos o objeto para a função printArea da classe printClass para exibir a área.
Vantagens / desvantagens da função de amigo
Uma vantagem da função ou classe friend é que podemos acessar os dados privados e protegidos da classe. Por exemplo, se estivermos implementando uma lista vinculada, então podemos tornar a classe de lista vinculada como um amigo da classe de nó e acessar seus dados como a lista vinculada consiste em nós.
Portanto, em uma determinada situação, usar uma função ou classe de amigo pode ser vantajoso. No entanto, também tem algumas desvantagens.
Uma das características distintivas do C ++ é o encapsulamento, ou seja, o agrupamento de dados e funções que operam nesses dados juntos, de modo que nenhuma função ou classe externa possa acessar os dados. Mas, ao permitir que funções ou classe de amigo acessem os membros privados de outra classe, na verdade comprometemos o recurso de encapsulamento.
Para evitar isso, devemos ter cuidado ao usar funções ou classes de amigos. Devemos garantir que não devemos usar muitas funções e classes de amigo em nosso programa, o que comprometerá totalmente o encapsulamento.
Conclusão
Isso conclui nosso tutorial sobre funções e classes de amigo em C ++.
Os leitores devem ser muito cautelosos ao usar classes e funções de amigo, pois isso pode atuar como um benefício para o programador, também precisa ser usado com cautela, pois o uso excessivo de funções e classes de amigo pode comprometer o recurso OOP de encapsulamento em nosso programa.
Em nosso próximo tutorial, aprenderemos sobre funções estáticas em C ++ em detalhes.
=> Visite aqui para aprender C ++ do zero.
Leitura recomendada