|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
[C++]Typeid
Sviluppando la mia lib, sono incappato in un problema:
Codice:
/**
* <b>Virtuale:</b> no
* <b>Funzione:</b> Parserizza le informazioni
* <b>Argomenti:</b> constante a Object
* <b>Return:</b> -
* <b>Eccezioni:</b> -
*/
void Object::ParseInfo(const Object *obj)
{
if(typeid(obj) == "Conf")
{
Conf* sel = dynamic_cast< Conf* >(obj);
if(sel){
sel->Info();
}
}
if(typeid(obj) == "Time")
{
Time* sel = dynamic_cast< Time* >(obj);
sel->Info();
if(sel){
sel->Info();
}
}
if(typeid(obj) == "App")
{
App* sel = dynamic_cast< App* >(obj);
sel->Info();
if(sel){
sel->Info();
}
}
}
}
|
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
devi sostituire
Codice:
typeid(sel) Codice:
typeid(sel).name() Per farlo funzionare puoi fare qualcosa del genere: Codice:
if ( typeid(sel) == typeid( Conf* ) )
{ ... }
Piuttosto cerca di sfruttare il polimorfismo degli oggetti, ridefinendo per ogni sottoclasse un metodo che faccia delle cose differenti. |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
ma infatti tutte le funz Info() sono overridding della Info() di Object che è virtual.
Ma io voglio che ParseInfo() scielga in base a quello che gli passo l'Info() da sciegliere |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Allora non serve...basta usare un puntatore all'oggetto base e fare: pun->info(); ed automaticamente verrà scelta la info() giusta... Altrimenti a cosa serve la derivazione ?!??!?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
|
|
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Codice:
/**
* <b>Virtuale:</b> no
* <b>Funzione:</b> Parserizza le informazioni
* <b>Argomenti:</b> constante a Object
* <b>Return:</b> -
* <b>Eccezioni:</b> -
*/
void Object::ParseInfo(const Object *obj)
{
*obj->Info();
}
Quote:
|
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Quote:
Da qualche parte avrai scritto qualcosa come Codice:
class Object {
/* ... /*
void Info();
/*...*/
};
Codice:
void Info() const; |
|
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
occhio che hai fatto un altro errore:
Codice:
*obj->Info(); |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Inoltre se usi il derefernce (l'asterisco) allora non devi usare ->...
Quindi: (*obj).Info(); ovvero obj->Info(); |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:29.



















