Ola, estou com um trabalho da faculdade para fazer e preciso implementar um diagrama UML com herancas:
Meu problema é o seguinte quando implemento a Classe Crianca ela possui um atributo do tipo Adulto, e a classe Adulto possui um atributo do tipo Crianca. O que ocorre é no momento da compilacao parece que se defino antes a Classe Crianca o compilador acusa que Adulto não esta definido( imagino que isso ocorra devido o compilador compilar linha-a-linha e como a Classe Crianca foi definida primeiro ainda não há um registro da Classe Adulto. Se inverto a ordem de inclusão o compilador da o mesmo problema acusando que crianca ainda não está definido. Então o que fazer? Segue abaixo o cabeçalho simples do meu codigo sem funcoes da logica de vendas implementadas!
#ifndef USUARIO_H
#define USUARIO_H
#include <string>
#include <iostream>
using std::string;
using namespace std;
namespace Entities{
//----------------------------- Classe-base usuario -----------------------------------
class Usuario{
protected:
int id_;
string nome_;
int idade_;
float saldo_;
public:
//Construtor padrão
Usuario();
//Cria novo usuario
//Pre-Condicao: não pode ser instanciado como Usuario
Usuario(int id,string nome,int idade,float saldo);
//Retorna ID do usuario
int getId();
//Retorna nome do usuario
string getNome();
//Retorna idade do usuario
int getIdade();
//Retorna saldo do usuario
float getSaldo();
//Modifica saldo do usuario
void setSaldo(float valor);
//Imprime dados do Usuario
//Funcao virtual pura -> define Usuario como classe abstrata
virtual void toString() = 0;
};
//----------------------------- Classe Adulto -----------------------------------
class Adulto : public Usuario{
protected:
Crianca *dependentes_;
int numDependentes_;
public:
//Cria novo usuario adulto
Adulto();
//Cria novo usuario com atributos
Adulto(int id,string nome,int idade,float saldo);
//Cria adulto co dependentes
Adulto(int id,string nome,int idade,float saldo, Crianca dependentes[], int numDependentes);
//Torna Adulto uma classe instanciavel
void toString() override;
//Adiciona dependente
void addDependente(Crianca *dependente);
};
//----------------------------- Classe Crianca -----------------------------------
class Crianca: public Usuario{
private:
Adulto *responsavel_;
public:
//Construtor padrão
Crianca();
//Cria novo usuario Crianca
Crianca(int id,string nome,int idade,float saldo,Adulto *responsavel);
//Sobrescreve funcao toString e permite que Crianca seja uma classe instanciavel
//Imprime na tela dados da crianca
void toString() override;
};
//----------------------------- Classe Idoso -----------------------------------
class Idoso : public Adulto{
public:
//Cria um novo Idoso
Idoso();
//Cria um novo idoso pre definiddo
Idoso(int id,string nome,int idade,float saldo);
};
}
#endif //USUARIO_H