Jump to content
Fórum Script Brasil
  • 0

Relacionamento entre classes Herdadas de Mesmo Nivel


abc123

Question

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

 

Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148680
    • Total Posts
      644502
×
×
  • Create New...