Newsgroup: it.comp.lang.c++
Titolo: oggetti e file !?

ciao a tutti, sto pian piano imparando il C++, ma il libro che usa non
mi parla di una questione che mi č venuta in mente:
In C, se avevo una struttura chiamata, ad esempio, indirizzi,
se scrivevo 
indirizzi indirizzo;
...
...
fwrite(&indirizzo, sizeof(indirizzi),1,fp);
..
..
scrivevo su file senza problemi i dati che avevo memorizzato in
indirizzo.
Ma se indirizzi, invece di una struttura, fosse una classe, potrei
salvare su file l'oggetto indirizzo utilizzando fwrite come prima?
Se no, esiste il modo di salvare oggetti su file?
Nel caso affermativo, sul file vengono salvati solo i dati
dell'oggetto oppure anche il codice delle funzioni membro di quella
classe?
grazie a tutti,
Alberto

 classe?
No, le funzioni non credo vengano salvate.
EMG

classe?
Solo i dati dell'oggetto. Infatti se provi a vedere quanto vale
sizeof(Oggetto), troverai la somma delle dimensioni di ogni singolo dato,
non del codice.
Es, su piattaforma DOS:
class MyClass
{
  int Dato;
  char Dato2;
}
sizeof(MyClass) sarà 3, cioè sizeof(int) + sizeof(char) = 2 + 1 = 3.
Un'altra cosa. Fai attenzione a utilizzare questo metodo per salvare i tuoi
dati su file, perchè nel caso che una classe contenga dei puntatori,
salveresti solo il valore di ques'ultimi, non i dati a cui puntano.
Ciao, Giuseppe
---------------------------------------------------------------------------
_Guybrush su IRCNet canale #programmazione
ICQ: 42227764
---------------------------------------------------------------------------

classe?
Solo i dati...
Il C++ non fornisce alcun mezzo (portabile) per salvare anche il
codice delle funzioni membro...
Cose di questo genere sono comunque interessanti (sostanzialmente)
solo a livello di OODBMS.
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------

sizeof(MyClass) sarà 3, cioè sizeof(int) + sizeof(char) = 2 + 1 = 3.
Mica vero...
sul mio compilatore (sotto windows) con allineamento su 32 bit il
risultato e` 8: sizeof(Dato) == 4, sizeof(Dato2) = 1 i rimanenti byte
(assumento che char sia memorizzato su 8 bit) sono utilizzati per 
l'allineamento).
Se poi aggiungiamo un metodo virtuale spunta anche il puntatore alla
 VTABLE e la dimensione sale a 12 ( come prima piu` i byte occupati dal
puntatore)


 No, le funzioni non credo vengano salvate.
No, le funzioni non vengono salvate (tutto è possibile, ma dovresti
inventarti tu un modo per salvarle, tipo pseudo-codice, bytecode o altro)
Alessandro Monti

virtuale....
Si, ho sbagliatamente generalizzato. Comunque, potresti spiegarmi quando
compare e come viene utilizzata la VTABLE e che tipo di complicazione può
apportare l'ereditarietà virtuale?
Ciao, Giuseppe
PS Hai ragione anche riguardo all'allineamento. Cmq io, in generale,
intendevo dire che salvando i dati su file (a meno di utilizzo di puntatori)
le informazioni non vengono perse.


Alessandro Monti ha scritto nel messaggio ...

Suppongo che l'entità oggetto sia realizzata molto diversamente a livello di
compilazione da quello che invece viene riportato nel linguaggio. Infatti
sizeof() riporta le stesse dimensioni per classi che hanno stesse variabili
membro ma diverse funzioni membro (da cui la scrittura su file senza
funzioni).
--
Francesco Trotta
http://space.tin.it/computer/ftrotta
Elimina "x_" dal mio indirizzo per mandarmi
un messaggio direttamente

le informazioni non vengono perse.
Ok! ;-)


Grazie Paolo, ho capito l'argomento.
Ciao, Giuseppe
