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

    Question

  • 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.
    • Edited by Iuri Castro Sunday, November 01, 2009 8:07 PM esclarecer o problema
    Sunday, November 01, 2009 7:49 PM

Answers

  • 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
    • Marked as answer by Iuri Castro Sunday, November 01, 2009 8:39 PM
    Sunday, November 01, 2009 8:39 PM

All replies

  • 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
    • Marked as answer by Iuri Castro Sunday, November 01, 2009 8:39 PM
    Sunday, November 01, 2009 8:39 PM
  • 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
    Friday, November 06, 2009 12:51 AM