O recurso amigo, usado por função ou classe, pode produzir um impacto negativo na estrutura orientada a objetos, pois enfraquece o encapsulamento, o que é contrário ao paradigma orientado a objetos. Esta é a razão pela qual o recurso de amigo deve ser usado com sabedoria, caso contrário, ele pode quebrar a ocultação de dados do código.
Esse recurso de amigo não é comutativo nem transitivo . X é amigo de Y e não infere que Y também é um amigo de X. Se X é um amigo de Y e Y é um amigo de Z, não implica que X seja um amigo de Z.
Gráfico de comparação
Base para comparação | Função amigo | Amigo da Classe |
---|---|---|
Basic | É uma função usada com uma palavra-chave friend para conceder acesso a uma função não membro aos membros privados de uma classe. | É uma classe usada com uma palavra-chave de amigo para acessar os membros privados de outra classe. |
Declaração para a frente | Deve ser usado. | Não obrigatório. |
Usar | Uma função de amigo pode ser usada em alguma situação de sobrecarga do operador. | Uma classe de amigo pode ser usada quando uma classe é criada no topo de outra classe. |
Definição de Função Amigo
A função friend é usada para acessar os membros privados e protegidos de uma classe, permitindo que a função não membro obtenha acesso. Nesse tipo de função, uma palavra-chave friend é usada antes do nome da função no momento da declaração. Existem algumas condições restritivas aplicadas à função friend. A primeira condição é que a função friend não seja herdada por uma classe filha. A segunda condição é que o especificador de classe de armazenamento pode não estar presente na função friend, o que significa que não pode ser declarado como estático e externo.
A função de amigo não é chamada com um objeto de chamada da classe. Os exemplos de função de amigo são: uma função global, função de membro de uma classe, modelo de função pode ser uma função de amigo. Vamos entender isso com a ajuda de um exemplo.
#include usando namespace std; class first {int data; public: first (int i): dados (i) {} friend void display (const primeiro & a); }; void display (const primeiro & a) {cout << "dados =" <Definição de Classe Amigo
Semelhante à função de amigo, podemos fazer com que uma classe seja amiga de outra classe que é chamada de classe de amigo . Para que a classe amiga possa ter acesso a membros privados definidos dentro da outra classe. É importante lembrar que a classe friend só pode acessar os nomes definidos dentro da outra classe em vez de herdar outra classe. Precisamente, os membros da primeira turma não podem se tornar membros da turma de amigos. Essas classes de amigos raramente são usadas.
A classe friend pode ser declarada em mais de uma classe. É considerado como um método alternativo curto para a função amigo, porque com a ajuda disto podemos criar uma classe de amigo que pode acessar todos os membros de dados e função em vez de criar várias funções de amigos.
#include usando namespace std; class First {// Declara uma classe de amigo classe de amigos Segundo; public: Primeiro (): a (0) {} void print () {cout << "O resultado é" << a << endl; } private: int a; }; segunda classe {public: void change (primeira e classe, int x) {yclass.a = x; }}; int main () // Output O resultado é 0 O resultado é 5Principais diferenças entre a função de amizade e a classe de amigos
- A função de amigo é uma função que pode acessar os membros privados e protegidos de uma classe. Em contraste, uma classe de amigo é uma classe que ajuda a acessar os membros privados de uma classe.
- Uma função de amigo é declarada incluindo seu protótipo dentro da classe, antes com a palavra-chave friend. Da mesma forma, uma classe de amigo também é definida usando a palavra-chave friend.
- A declaração forward é usada em caso de função friend contra, não é necessário usá-la na classe friend.
Conclusão
Uma função friend é necessária quando uma função precisa acessar duas ou mais classes independentes, membros internos. Por outro lado, uma classe de amigo é necessária quando uma classe requer acesso aos membros de outra classe. Quando uma função de vários membros precisa ser um amigo dessa função, nesse caso, é melhor usar a classe friend.