Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Explicação da palavra chave friend.

O conceito de uma função amiga ficou um pouco dificil de entender para mim no video, quando apresentado junto do conceito de sobrecarga de um operador, acho que talvez apresentar o conceito de classe amiga de forma simples, seguindo para um metodo e depois trazer uma sobrecarga de operador com a atrbiuição de acesso através da palava chave friend ficaria mais facil de entender.

1 resposta
solução!

Olá Ramon! Como vai?

A palavra-chave friend em C++ é usada para dar a uma função ou classe externa acesso aos membros privados de outra classe. Isso é útil quando você quer que uma função externa, que não faz parte da classe, tenha a capacidade de acessar os dados privados dessa classe.

Função Amiga

Imagine que você tem uma classe Conta e dentro dela, você tem dados que são privados, como o titular da conta. Normalmente, esses dados não podem ser acessados diretamente de fora da classe. No entanto, se você declarar uma função como amiga dessa classe, essa função poderá acessar esses dados privados.

Por exemplo, se você tem uma função que precisa acessar o nome do titular para exibi-lo, mas essa função não faz parte da classe Conta, você pode declará-la como uma função amiga:

class Conta {
    private:
        Pessoa titular;
    public:
        friend std::ostream& operator<<(std::ostream& cout, const Conta& conta);
};

Aqui, operator<< é uma função amiga da classe Conta, o que significa que ela pode acessar o titular da conta, mesmo que ele seja privado.

Classe Amiga

De forma semelhante, você pode ter uma classe inteira como amiga de outra classe. Isso permite que todos os métodos da classe amiga acessem os membros privados da outra classe. No entanto, isso é menos comum e deve ser usado com cuidado, pois pode tornar o código menos seguro e mais difícil de manter.

Exemplo Prático

Vamos supor que você tenha uma classe Pessoa e uma classe Conta, e você quer que uma função externa possa exibir o nome do titular da conta. Você pode fazer isso usando uma função amiga:

#include <iostream>
#include <string>

class Pessoa {
    private:
        std::string nome;
    public:
        Pessoa(std::string n) : nome(n) {}
        std::string recuperaNome() const { return nome; }
};

class Conta {
    private:
        Pessoa titular;
    public:
        Conta(Pessoa p) : titular(p) {}
        friend std::ostream& operator<<(std::ostream& cout, const Conta& conta);
};

std::ostream& operator<<(std::ostream& cout, const Conta& conta) {
    cout << "O titular da conta é: " << conta.titular.recuperaNome();
    return cout;
}

int main() {
    Pessoa p("Vinícius");
    Conta c(p);
    std::cout << c << std::endl;
    return 0;
}

Neste exemplo, a função operator<< é capaz de acessar o nome do titular da conta, mesmo que titular seja um membro privado da classe Conta.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.