Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-12-2004, 10:40   #1
dupa
Senior Member
 
L'Avatar di dupa
 
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
[C++] vector, oggetti, ereditarietà, file

[Nota: i nomi delle classi le ho scelte per fare un esempio abbastanza comprensibile e semplice rispetto al mio reale problema]

class Draw {
...
vector<Shape*> shape;
...
}

Shape viene estesa da varie classi: Circle, Triangle, Square...
In pratica mi trovo il vector composto da classi varie derivate da Shape.

Immagina un disegno con N figure, che possono essere di vario tipo, in sostanza il disegno contiene un array di forme, (che poi distinguo l'una dall'altra in base all'estensione dalla classe base)

Ognuna delle classi derivate ha quindi attributi differenti dalle altre..
Facendo un esempio stupido...

"Circle" ha 5 attributi di vario tipo
"Squadre" ha 7 attributi di vario tipo.
ecc. ecc.

Ora il problema che mi si pone è salvare su file un'istanza della classe Draw.

Vorrei chiedervi se conoscete qualche "tecnica" per salvare oggetti in modo agevole su file.

Perchè usando una programmazione molto banale potrei fare così:

- In fase di salvataggio:
Salvo prima di tutto un codice identificativo che mi dice che tipo di classe è quella corrente del vettore, quindi scrivo in fila tutti i suoi attributi, poi scrivo il tipo di classse che è il secondo elemento del vettore, quindi i suoi attributi.. ecc. ecc.

- In fase di lettura:
Leggo i primi byte contenenti il codice identificativo, in base a quello scopro che classe è e quindi un metodo di quella classe procederà a leggere gli attributi.
Finito ciò passerò alla lettura del codice identificativo del secondo oggetto salvato nel file.. scopro che classe è.. passo alla lettura dei suoi attributi.. ecc. ecc.

In sostanza un esempio di file potrebbe essere una cosa del tipo:

Circle:4832:34:23:663:33:Square:334:664:23:53:876:443:6767:EOF

In pratica "Circle:" mi dice che il primo elemento salvato è un cerchio, e sapendo che ha 5 attributi, passo alla loro lettura mediante un metodo apposito (tramite polimorfismo) della classe cerchio.

Poi leggo "Square:" so che ha 7 attributi e passo alla loro lettura e creazione in memoria del relativo oggetto.. ecc. ecc.

Ok.. usando il polimorfismo non è nemmeno così complicato... ma...
esiste qualcosa di più rapido per effettuare un salvataggio su file di questo tipo?

(possibilmente usando librerie incluse di "default" nel c++)

Grazie
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino.
dupa è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2004, 13:59   #2
pipozzolo
Senior Member
 
L'Avatar di pipozzolo
 
Iscritto dal: Feb 2001
Città: Kasteddu
Messaggi: 1890
Re: [C++] vector, oggetti, ereditarietà, file

Quote:
Originariamente inviato da dupa
[Nota: i nomi delle classi le ho scelte per fare un esempio abbastanza comprensibile e semplice rispetto al mio reale problema]

class Draw {
...
vector<Shape*> shape;
...
}

Shape viene estesa da varie classi: Circle, Triangle, Square...
In pratica mi trovo il vector composto da classi varie derivate da Shape.

Immagina un disegno con N figure, che possono essere di vario tipo, in sostanza il disegno contiene un array di forme, (che poi distinguo l'una dall'altra in base all'estensione dalla classe base)

Ognuna delle classi derivate ha quindi attributi differenti dalle altre..
Facendo un esempio stupido...

"Circle" ha 5 attributi di vario tipo
"Squadre" ha 7 attributi di vario tipo.
ecc. ecc.

Ora il problema che mi si pone è salvare su file un'istanza della classe Draw.

Vorrei chiedervi se conoscete qualche "tecnica" per salvare oggetti in modo agevole su file.

Perchè usando una programmazione molto banale potrei fare così:

- In fase di salvataggio:
Salvo prima di tutto un codice identificativo che mi dice che tipo di classe è quella corrente del vettore, quindi scrivo in fila tutti i suoi attributi, poi scrivo il tipo di classse che è il secondo elemento del vettore, quindi i suoi attributi.. ecc. ecc.

- In fase di lettura:
Leggo i primi byte contenenti il codice identificativo, in base a quello scopro che classe è e quindi un metodo di quella classe procederà a leggere gli attributi.
Finito ciò passerò alla lettura del codice identificativo del secondo oggetto salvato nel file.. scopro che classe è.. passo alla lettura dei suoi attributi.. ecc. ecc.

In sostanza un esempio di file potrebbe essere una cosa del tipo:

Circle:4832:34:23:663:33:Square:334:664:23:53:876:443:6767:EOF

In pratica "Circle:" mi dice che il primo elemento salvato è un cerchio, e sapendo che ha 5 attributi, passo alla loro lettura mediante un metodo apposito (tramite polimorfismo) della classe cerchio.

Poi leggo "Square:" so che ha 7 attributi e passo alla loro lettura e creazione in memoria del relativo oggetto.. ecc. ecc.

Ok.. usando il polimorfismo non è nemmeno così complicato... ma...
esiste qualcosa di più rapido per effettuare un salvataggio su file di questo tipo?

(possibilmente usando librerie incluse di "default" nel c++)

Grazie
Perchè non usare Xml?
Definisci nella classe Shape il metodo virtual getXml() che ti restituisce l'xml rappresentante la classe stessa e lo implementi in ogni classe che la estende.
es per la classe Circle il valore restituito potrebbe essere:
<Circle>
<nomeattributo1>4832</nomeattributo1>
......
<nomeattributo5>33</nomeattributo5>
</Circle>

Poi crei un metodo simile anche in Draw che non fa altro che creare il tag e concatenarci i risultati delle chiamate al metodo getXml() di tutti gli elementi del Vector.
es:
<Draw>
<Circle>
<nomeattributo1>4832</nomeattributo1>
......
<nomeattributo5>33</nomeattributo5>
</Circle>
<Square>
.....
</Square>
</Draw>

Non è certo la soluzione + vantaggiosa in spazio occupato ma ha i vantaggi non indifferent di Xml.
__________________
Asus P5Q-E - Intel Q6600 - Corsair 4GB DDR2 - Radeon HD5770 - Seagate 320GB sata2 16M - Audigy2 ZS
Acer Aspire 3023 WLMI
pipozzolo è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2004, 10:17   #3
dupa
Senior Member
 
L'Avatar di dupa
 
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
Ho fatto una ricerca su internet, le librerie che ho trovato riguardano + che altro piattoforma .NET, MFC o altro...
Io sto lavorando in c++ "base".. in sostanza quello che ti crea degli .exe da "dos".
se conoscete una libreria semplice da usare per XML non sarebbe male..

Ma non esiste qualcosa di simile a serialize, unserialize di java?
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino.
dupa è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2004, 12:02   #4
end.is.forever
Senior Member
 
Iscritto dal: Jul 2004
Messaggi: 1578
Quote:
Originariamente inviato da dupa
Ho fatto una ricerca su internet, le librerie che ho trovato riguardano + che altro piattoforma .NET, MFC o altro...
Io sto lavorando in c++ "base".. in sostanza quello che ti crea degli .exe da "dos".
se conoscete una libreria semplice da usare per XML non sarebbe male..

Ma non esiste qualcosa di simile a serialize, unserialize di java?
La serializzazione di Java è possibile grazie al fatto che dispone di un framework che gli permette di avere informazioni sui tipi, e quindi sui membri delle classi.
Questo in un linguaggio compilato staticamente è impossibile, o comunque molto difficile.

Comunque per un parser XML semplice guarda questo
http://expat.sourceforge.net/
La versione base è per C, quindi non oo, se vuoi qualcosa di più di alto livello ci sono dei wrappers di cui trovi i link sulla stessa pagina (per DOM, SAX, Classi C++...).
end.is.forever è offline   Rispondi citando il messaggio o parte di esso
Old 27-12-2004, 21:58   #5
dupa
Senior Member
 
L'Avatar di dupa
 
Iscritto dal: Jan 2002
Città: Napoli
Messaggi: 1727
la cosa che mi sembra più easy da fare è utilizzare le varie classi e oggetti di <iostream> relative ai file, andando a definire gli operatori << e >> per le classi da me create
__________________
Se buttassimo in un cestino tutto ciò che in Italia non funziona cosa rimarrebbe? Il cestino.
dupa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Nuove informazioni sul fallimento del la...
SpaceX: completato parte dell'assemblagg...
Landspace si prepara al secondo lancio d...
Tutti gli sconti Apple su Amazon: tornan...
Altro che entry-level: due smartwatch Am...
Roscosmos ha posticipato (ancora) il lan...
Isar Aerospace si prepara al secondo lan...
Tory Bruno è entrato in Blue Orig...
Fujifilm lancia la cartuccia per archivi...
Dreame H15 Mix: la soluzione 7-in-1 per ...
AirPods Pro 3 in forte sconto su Amazon:...
36 offerte Amazon, molte appena partite:...
2 caricatori multipli eccezionali: da 28...
OLED e 360 Hz a un prezzo senza preceden...
Roborock Q10 S5+ a un prezzo molto conve...
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: 21:30.


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