PDA

Visualizza la versione completa : [C++] operatore che controlla il tipo di un oggetto


melmar20
30-09-2008, 10:43
ciao ragazzi in c++ esiste un operatore per controllare il tipo di un oggetto??

vorrei fare una cosa del genere :


classeTipo x;

if (x type classeTipo) cout<<"x un oggetto della classeTipo";
else cout<<"x non un oggetto della classeTipo";

Stoicenko
30-09-2008, 10:51
typeof includendo typeinfo




#include <typeinfo>

if(typeof(var1) == tipeof(var2)) //sono dello stesso tipo

if(typeof(var1) == typeof(TIPO)) // del tipo TIPO




attento che per i puntatori vale il tipo statico a meno che non siano polimorfi

melmar20
17-10-2008, 16:57
ciao seguendo il tuo consiglio ho scritto:


do{
cout<<"Quanti chilometri percorrera' l'automobilista? : ";
cin >> chilometri_percorsi_appoggio;
}while(typeof(chilometri_percorsi_appoggio)!=typeo f(int));

ma il compilatore mi segnala un errore.

dice 103 main.cpp expected primary-expression before "typeof"

Stoicenko
17-10-2008, 17:10
#include <typeinfo>

l'hai messo?

MacApp
17-10-2008, 17:21
Originariamente inviato da melmar20
ciao seguendo il tuo consiglio ho scritto:


do{
cout<<"Quanti chilometri percorrera' l'automobilista? : ";
cin >> chilometri_percorsi_appoggio;
}while(typeof(chilometri_percorsi_appoggio)!=typeo f(int));

ma il compilatore mi segnala un errore.

dice 103 main.cpp expected primary-expression before "typeof"

Come ti ha detto Stoicenko devi includere typeinfo.

In ogni modo semanticamente dubito che il tuo programmino possa svolgere cio' che ti proponi. Il tipo di chilometri_percorsi_appoggio NON cambia in funzione di quello che l'utente ha digitato.

Stoicenko
17-10-2008, 17:54
infatti probabilmente sar visto come un char (non vorrei aver detto una castronata)

melmar20
17-10-2008, 18:18
#include <typeinfo> l'ho messo.

quel ciclo do while, mi serve per controllare che l'utente abbia effettivamente inserito un intero, altrimenti deve ripetere l'inserimento

MItaly
17-10-2008, 21:05
Ma se tu hai dichiarato chilometri_percorsi_appoggio come int, typeof(chilometri_percorsi_appoggio) sar sempre uguale a typeof(int). Per verificare se stato estratto correttamente un intero devi verificare se, dopo l'estrazione, impostato o meno il failbit dello stream. Per cui:


int chilometri_percorsi_appoggio;
//...
do
{
cout<<"Quanti chilometri percorrera' l'automobilista? : ";
cin.clear(); //resetta i bit di errore
cin.sync(); //svuota il buffer di lettura
cin >> chilometri_percorsi_appoggio;
} while(cin.fail()); //true se ci sono stati errori di estrazione
.

oregon
17-10-2008, 21:23
Originariamente inviato da melmar20
#include <typeinfo> l'ho messo.

quel ciclo do while, mi serve per controllare che l'utente abbia effettivamente inserito un intero, altrimenti deve ripetere l'inserimento

C'e' un equivoco ... tu hai capito che il typeof serva a testare il fatto che il valore inserito da tastiera sia un intero, mentre serve solo a controllare che il tipo di variabile sia un intero ...

melmar20
18-10-2008, 00:44
ho capito, io pensavo potesse essere utilizzato come una funzione di controllo per i dati che si ricevono in input. Invece a quando pare devo scandire la stringa in ingresso e controllare carattere per carattere. giusto??

o magari c' una funzione gi implementata in c++ che mi facilita il compito??

Loading