Ir para conteúdo
Fórum Script Brasil
  • 0

Verificando instância de classe


Guest Evandro

Pergunta

Oi pessoal,

estou com uma dúvida quanto a verificação de instâncias.

É o seguinte: estruturei uma classe (mãe) e duas derivadas dessa. Eu gostaria de acessar as instâncias das classes-filhas por um ponteiro genérico (no caso, um ponteiro para a classe-mãe). Para chamar os métodos das classes-filhas, pensei em usar um cast no ponteiro. Contudo, não sei como exatamente verificar a qual classe pertence cada objeto, que é criado em execução, de acordo com o tipo que o usuário desejar, e armazenado em uma lista. No ambiente do Delphi, utilizo a palavra "is" para essa verificação (if teste is Tedit then, por exemplo). Fiquei sabendo que em Java também há um similar. Gostaria de saber se alguém conhece algum modo de fazer o mesmo com o C++. Senão,

Desde já agradeço a atenção.

Abraços!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Evandro, acredito que uma boa opção seria o uso de polimorfismo.

Como não programo em C++, busquei um exemplo em C++ que demonstrasse o uso de métodos virtuais (Ref. Exemplos de Polimorfismo em C++), tal como podemos implementar em Delphi e montei este exemplo. Caso não esteja correto, por favor, me desculpe, mas a idéia continua valendo.

Com este tipo de implementação, passa a ser indiferente saber de que classe você deverá chamar o método desejado (nada de type-cast), já que cada qual "responderá" de acordo com sua implementação. Vamos ao exemplo:

class Base
{
  public:
   virtual void Quem(void)
   {
      cout << "Base\n";
   }
   virtual void Exemplo(void)
   {
      cout << "Exemplo na classe Base\n";
   }
};

class Primeira:public Base
{
   public:
   void Quem(void)
   {
      cout << "Primeira\n";
   }
}; 

class Segunda:public Base
{
   public:
   void Quem(void)
   {
      cout << "Segunda\n";
   }
   void Exemplo(void)
   {
      cout << "Exemplo na classe Segunda\n";
   }
};


void ShowWho(Base *base)
{
   base->Quem();
   base->Exemplo();
}

main (void)
{
   Primeira primeira;
   Segunda segunda;

   ShowWho(&primeira);
   ShowWho(&segunda);

   return 0;
}

Observe que a declaração dos métodos utilizados nas classe filhas, deverá ser definido como virtual na classe base (mãe). Nas classes filhas, você sobrescreve os métodos necessários para que esta classe responda corretamente à chamada do método (eventualmente, alguma classe não necessitará sobrescrever um determinado método).

Quando você define em uma função, como em ShowWho o parâmetro como sendo do tipo da classe mãe, ao chamar a função com uma instância de qualquer das classes filhas, na função o método do objeto que irá ser utilizado é aquele da classe a que o mesmo pertence - no exemplo, primeira e segunda.

Acho que há um exemplo que explica melhor este recurso, pode ser visto aqui: Básico de C++: Membros Virtuais. Abstração. Polimorfismo (ref. Linha de Código)

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...