Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 11-04-2003, 19:31   #1
Kleidemos
Bannato
 
L'Avatar di Kleidemos
 
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();
                  }
         }
    }    
    
}
Non va......................mi sai aiutare?
Kleidemos è offline   Rispondi citando il messaggio o parte di esso
Old 11-04-2003, 21:22   #2
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
devi sostituire
Codice:
typeid(sel)
con
Codice:
typeid(sel).name()
In ogni caso non ti funzionera' come vuoi il codice: il nome che ti viene restituito non e' detto che sia quello che ti aspetti , e' piu' una sorta di nome interno (col gcc ad esempio otterresti qualcosa del tipo "4Conf", "4Time" e "3App").

Per farlo funzionare puoi fare qualcosa del genere:
Codice:
if ( typeid(sel) == typeid( Conf* ) )
{ ... }
Ma non e' secondo me la soluzione adatta.
Piuttosto cerca di sfruttare il polimorfismo degli oggetti, ridefinendo per ogni sottoclasse un metodo che faccia delle cose differenti.
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2003, 05:49   #3
Kleidemos
Bannato
 
L'Avatar di Kleidemos
 
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
Kleidemos è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2003, 08:36   #4
cionci
Senior Member
 
L'Avatar di cionci
 
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 ?!??!?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2003, 09:40   #5
soalle
Senior Member
 
L'Avatar di soalle
 
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
il polimorfismo è questo...
soalle è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2003, 11:58   #6
Kleidemos
Bannato
 
L'Avatar di Kleidemos
 
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();
}
cosi mi da:
Quote:
Lib/object.cpp: In member function `void LucLib:bject::ParseInfo(const
LucLib:bject*)':
Lib/object.cpp:38: passing `const LucLib:bject' as `this' argument of `
virtual void LucLib:bject::Info()' discards qualifiers
Lib/object.cpp:38: void value not ignored as it ought to be
Kleidemos è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2003, 13:17   #7
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Quote:
Originally posted by "Kleidemos"

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();
}
cosi mi da:
Non puoi passare un oggetto "const" come parametro se poi usano metodi che lo modificano. In questo caso il metodo info non e' stato dichiarato const.
Da qualche parte avrai scritto qualcosa come
Codice:
class Object {
/* ... /*
void Info();
/*...*/
};
devi cambiare la dichiarazione di Info in
Codice:
void Info() const;
ad indicare che il metodo non modifica l'oggetto su cui lo chiami. Ovviamente questo funziona se effettivamente non lo modifichi, altrimenti devi togliere il "const" da ParseInfo
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2003, 13:19   #8
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
occhio che hai fatto un altro errore:
Codice:
*obj->Info();
va scritto senza l'asterisco ( la freccia fa gia' da sola la dereferenziazione )
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 12-04-2003, 13:21   #9
cionci
Senior Member
 
L'Avatar di cionci
 
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();
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Samsung Galaxy A27 5G è ufficiale...
TCL aggiorna la sua gamma di monitor per...
Anche OPPO avrà uno smartphone co...
La Radeon RX 9070 XT appare su Steam e m...
L'America si ribella ai datacenter: bloc...
'Artificial General Engineer': l'IA di J...
Il drone NASA Dragonfly, che voler&agrav...
Stop immediato a Fable 5 e Mythos 5: il ...
"Prime Day Amazon il 23-26 giugno": sì e...
Oggi 2 super MacBook Pro M5 e M5 Pro, 24...
Tineco Floor One Station S9 Artist: il s...
Raggiunte nuove altitudine e velocit&agr...
Apple Watch Series 11 GPS a 339€ su Amaz...
Come un MacBook, ma con la RTX 5070: MSI...
Paolo Zaccardi: "Smettere di assume...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:12.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v