Ir ao conteúdo
  • Cadastre-se

C++ Relacionamento entre classes Herdadas de Mesmo Nivel


Cortella

Posts recomendados

Ola, estou com um trabalho da faculdade para fazer e preciso implementar o seguinte diagrama UML:

foto.thumb.jpg.60ce9cd3f4be372a99d98e541cb20b4f.jpg

 

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 nao 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 nao está definido. Então o que fazer? Segue abaixo o cabeçalho simples do meu codigo sem funcoes da logica de vendas implementadas!

 

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: Nao 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 para o comentário
Compartilhar em outros sites

Olá @Cortella

 

Confesso que não li com atenção o código ainda, mas se foi você que definiu as classes, pergunto: se Idoso é derivado de Adulto porque não seguir a natureza e derivar o Adulto de Crianca? 

Um Adulto poderia acrescentar Criancas privadas e um idoso poderia acrescentar por exemplo um cartao INSS privado e instâncias de Medicamentos, INSS, sei lá :D --- ok essa foi pobre --- e no construtor de adulto se poderia validar a idade ou fazer uma chamada a um método de validação de maturidade --- ok também foi pobre


Isso

//Pre-Condicao: Nao pode ser instanciado como Usuario 
Usuario(int id,string nome,int idade,float saldo);

é pra dizer que Usuario é abstrato?

 

 

Link para o comentário
Compartilhar em outros sites

41 minutos atrás, Cortella disse:

 Olá @arfneto ,
Não posso derivar adulto de Crainça simplesmente porque preciso implementar exatamente esse diagrama UML =/. E sim esse comentário é para dizer que usuário é abstrato!!

 

Por isso perguntei se você tinha escrito também o diagrama, como parte do execício. Trata-se de um exemplo bem ruim. Deviam ter ficado com os clássicos: classe carro, classe animal, classe cachorro , classe poodle... 

 

Paciência. Mais um enunciado ruim. Na minha opinião, claro. Mas tenho a mãe natureza do meu lado: estamos falando de abstração do ciclo de vida afinal. Inacreditável esse exemplo.

 

15 horas atrás, Cortella disse:

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 nao 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

 

Pois é: mais um sinal de que está errado o conceito. Deixe o responsável como criança mesmo e depois no programa promova a instância para adulto pra você poder continuar com o desenvolvimento. Alguém vai resolver isso depois. Não é culpa sua. Mas não perca tempo.

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!