none
É possível criar uma lista de objetos que possuem apenas a classe Base em comum? RRS feed

  • Pergunta

  • Primeiramente, como o próprio titulo diz, é possível criar uma lista de objetos que possuem apenas a classe base em comum?
    Se for possível alguem pode me dizer como posso fazer isso, por exemplo, nas classes abaixo?

    #include <iostream>

    using namespace std;

    class Base
    {
    public:
    virtual void Handler() { cout << "HANDLER BASE CHAMADO" << endl; };
    };

    class DerivadaA : public Base
    {
    public:
    void Handler() { cout << "HANDLER A CHAMADO" << endl; };
    };

    class DerivadaB : public Base
    {
    public:
    void Handler() { cout << "HANDLER B CHAMADO" << endl; };
    };
    Qualquer ajuda é bem vinda, Obrigado.

    EDIT: Não sei se minha dúvida ficou muito clara então vou tentar esclarecer ela...
    Eu vou ter varios objetos das classes DerivadaA e DerivadaB e quero coloca-los em uma lista, mas a unica coisa em comum entre eles é que eles são derivados da mesma classe Base. É possível criar essa lista utilizando essa caracteristica deles? Se não, alguem sabe outro meio de solucionar esse problema? Obrigado novamente.
    • Editado Iuri Castro domingo, 1 de novembro de 2009 20:07 esclarecer o problema
    domingo, 1 de novembro de 2009 19:49

Respostas

  • O meu problema foi resolvido utilizando Upcasting:

    Base **list = new Base*[3];

    list[0] = new DerivadaA();
    list[1] = new DerivadaB();
    list[2] = new Base();

    Devo agradecimentos a
    • Marcado como Resposta Iuri Castro domingo, 1 de novembro de 2009 20:39
    domingo, 1 de novembro de 2009 20:39

Todas as Respostas

  • O meu problema foi resolvido utilizando Upcasting:

    Base **list = new Base*[3];

    list[0] = new DerivadaA();
    list[1] = new DerivadaB();
    list[2] = new Base();

    Devo agradecimentos a
    • Marcado como Resposta Iuri Castro domingo, 1 de novembro de 2009 20:39
    domingo, 1 de novembro de 2009 20:39
  • eu tenho uma pergunta para deixá-lo intrigado..

    imagine uma classe base com a função Handler(..), como voce especificou.

    As duas classes Derivadas também.

    Agora uma outra classe, SuperDerivada, ela irá ter herança múltipla, herdando das duas classes Derivadas, e ela não irá escrever a função Handler(..).

    Ao percorrer sua lista, voce chama

    pBase->Handler(..);

    Qual dos dois Handlers(..) será chamado??

    Como tratar esse caso??

    ;)

    Abraços,

    cox



    cox
    sexta-feira, 6 de novembro de 2009 00:51