Ir ao conteúdo
  • Cadastre-se

Existe alguma função que retorna o tipo de um Objeto? [Relacionado a Herança C++]


Sh4dow_Fre4k

Posts recomendados

Olá pessoal, tudo bem?

Estou com um pequeno probleminha em relação a Herança em C++.

Eu gostaria de me referir ao tipo de um objeto e não consigo usar nada como um typeof(tipo) para fazer funcionar.

Existe em meu programa uma Classe Componente que possui tensões e correntes de envio e leitura. Existem funções de alteração de corrente e tensão e funções de leitura de corrente e tensão.

Existem também várias Classes-filhas de Componente, sendo cada uma delas, componentes do sistema que preciso controlar. Existe por exemplo a classe Catodo, Anodo, Gas, Coletor, Analisador, entre outras. Nessas classes não há funções específicas. Como elas são filhas da classe Componente, estou usando as funções da classe-mãe.

Estou criando um objeto de cada classe-filha e está funcionando normalmente.

--- exemplo ---

Catodo catodo;

Anodo anodo;

Gas gas;

--- fim exemplo ---

Existe uma função dentro da Classe Componente que mostra na tela o estado atual das tensões e correntes do objeto.

--- exemplo ---

void Componente::estadoAtual() {

cout << "Tensão atual é: " << tensaoEnviada << endl;

cout << "Corrente atual é: " << correnteEnviada << endl;

}

--- fim exemplo ---

O problema é que não sei como retornar o tipo do objeto o qual se pede o estadoAtual(). Tentei usar typeof(catodo) mas não retorna nada.

Queria retornar algo do tipo: "A Tensão no catodo é 5 V. A Corrente no anodo é 1 A."

Alguém conhece alguma função que retorne o tipo de uma variavel ou o tipo de um objeto?

Agradeço desde já a atenção,

Alexandre.

Link para o comentário
Compartilhar em outros sites

Eu suspeito que o que você quer é o "typeid".

Procure nessa página por typeid, lá no final, tem um exemplo: http://www.cplusplus.com/doc/tutorial/typecasting/

No entanto, acho que o ideal seria você tentar pensar o código de um jeito onde não fosse preciso isso, pois parece o tipo de coisa que pode te dar alguma dor de cabeça mais adiante.

Link para o comentário
Compartilhar em outros sites

:) Exatamente o que eu queria!

Obrigado Lunik!

----- exemplo -----

// typeid, polymorphic class

#include <iostream>

#include <typeinfo>

#include <exception>

using namespace std;

class CBase { virtual void f(){} };

class CDerived : public CBase {};

int main () {

try {

CBase* a = new CBase;

CBase* b = new CDerived;

cout << "a is: " << typeid(a).name() << '\n';

cout << "b is: " << typeid(B).name() << '\n';

cout << "*a is: " << typeid(*a).name() << '\n';

cout << "*b is: " << typeid(*B).name() << '\n';

} catch (exception& e) { cout << "Exception: " << e.what() << endl; }

return 0;

}

---- fim do exemplo -----

Resposta abaixo:

a is: class CBase *

b is: class CBase *

*a is: class CBase

*b is: class CDerived

Obrigado! :)

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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