1
resposta

Problema com métodos get()

Estou tendo problemas com a parte de getNome() e getCpf() do meu projeto Banco. Meu código não está tão diferente do do professor, mas como tentei algumas coisas pra consertar, me perdi e estou achando tudo confuso. Acho que tem a ver com a herança, mas não sei. Meu código roda, mas ele não consegue acessar os nomes das pessoas. No arquivo main, comentei o que estava dando problema pra seguir o curso, mas agora tenho um output diferente do professor. Além disso, quando tento baixar o projeto no site da Alura, ele não está atualizado até o ponto da aula que estou.

Esse é meu arquivo main:

#include <iostream>
#include <string>
#include "Conta.hpp"
#include "Titular.hpp"
#include "Cpf.hpp"
#include "Funcionario.hpp"

using namespace std;


void ExibeSaldo(const Conta& conta){
    cout << "O saldo é: " << conta.getSaldo() << endl;
}

int main() {
    Conta umaConta("123456", Titular(Cpf("123.456.789-10"), "Heloisa")); // Conversão implícita
    umaConta.depositar(500);
    umaConta.sacar(200);
    cout << "Uma conta - saldo: " << umaConta.getSaldo() << endl;
    cout << "Uma conta - numero: " << umaConta.getNumero() << endl;
    //cout << "Uma conta - cpf: " << umaConta.getCpf() << endl;
    //cout << "Uma conta - nome: " << umaConta.getNome() << endl;
    ExibeSaldo(umaConta);
    
    Conta umaOutraConta("7890", Titular(Cpf("123.456.789-10"), "Thomas"));
    umaOutraConta.depositar(500);
    umaOutraConta.sacar(300);
    cout << "Uma conta - saldo: " << umaOutraConta.getSaldo() << endl;
    cout << "Uma conta - numero: " << umaOutraConta.getNumero() << endl;
    //cout << "Uma conta - cpf: " << umaOutraConta.getCpf() << endl;
    //cout << "Uma conta - nome: " << umaOutraConta.getNome() << endl;
    ExibeSaldo(umaOutraConta);
    
    Conta maisUmaConta("7890", Titular(Cpf("123.456.789-10"), "Ana"));

    cout << "Número de contas: " << Conta::getNumerodeContas() << endl;
        
    Funcionario funcionario(Cpf ("123.456.789-10"), "Leoo", 7000);
    
    cout << "Nome do funcionario: " << funcionario.Pessoa::getNome() << endl;
    
    return 0;
}

E implementei os get() do arquivo Pessoa.cpp:


#include "Pessoa.hpp"
#include <iostream>

Pessoa::Pessoa(Cpf cpf, std::string nome): cpf(cpf), nome(nome) {
    std::cout << "Construtor de pessoa" << std::endl;
    verificaTamanhoDoNome();
}

void Pessoa::verificaTamanhoDoNome(){
    if (nome.size() < 5){
        std::cout << "Nome muito curto" << std::endl;
        exit(1); // Indica um erro qualquer
    }
}

std::string Pessoa::getCpf() const {
    return cpf.getCpf();
}

std::string Pessoa::getNome() const {
    return nome;
}
1 resposta

Oi Heloisa! Tudo joia?

O problema pode estar relacionado à forma como você está acessando os métodos da classe Titular, que provavelmente herda de Pessoa. Vou sugerir alguns passos para resolver isso:

  1. Verifique a Classe Titular: tenha certeza de que a classe Titular está herdando corretamente da classe Pessoa. A herança deve ser algo como:

    class Titular : public Pessoa {
        // outros membros e métodos
    };
    
  2. Acesso aos Métodos get: se a classe Titular herda de Pessoa, você deve ser capaz de acessar getNome() e getCpf() diretamente em um objeto Titular. No entanto, você está tentando acessar esses métodos através de um objeto Conta. Certifique-se de que a classe Conta tem um método para acessar o Titular ou diretamente os métodos getNome() e getCpf().

  3. Adicione Métodos na Classe Conta: Se não houver métodos na classe Conta para acessar o Titular, você pode adicionar algo como:

    class Conta {
    private:
        Titular titular;
        // outros membros
    
    public:
        // outros métodos
    
        std::string getNomeTitular() const {
            return titular.getNome();
        }
    
        std::string getCpfTitular() const {
            return titular.getCpf();
        }
    };
    

    Com isso, você poderá chamar umaConta.getNomeTitular() e umaConta.getCpfTitular() no seu main.

  4. Verifique o Construtor de Conta: certifique-se de que o construtor de Conta está inicializando corretamente o objeto Titular.

Após fazer essas alterações, descomente as linhas problemáticas no main e teste novamente para ver se agora você consegue acessar os nomes e CPFs corretamente.

Espero que essas dicas ajudem a esclarecer o problema e a resolvê-lo.

Abraços e bons estudos!

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