La serializzazione è un concetto molto semplice e molto importate perché ti permette di "salvare" (tra poco capirai perché tra virgolette) un istanza di una classe.
Consiste nel prelevare tutti i dati dalle variabili che caratterizzano la distinzione tra due istanze di una stessa classe e convertirli in byte (se vuoi andare a scrivere un file binario) o mantenere il valore com'è e portarsi dietro il tipo (se vuoi andare a scrivere un file XML).
Binario: se non ti interessa che sia possibile la manipolazione da parte di un essere umano o se devi passare i dati attraverso uno stream
XML: esattamente il contrario
Queste sono solo le conversioni più usate ma puoi dettare tu un nuovo "protocollo".
Vediamo un esempio...
class Foo {
int a;
int b;
int *c;
int A {
get{return this.a;}
set{this.a = value;}
}
int B {
get{return this.b;}
set{this.b = value;}
}
}
Vediamo subito che nella nostra bella classe Foo abbiamo solo a e b che ne determinano l'unicità, c è un puntatore, quando andremo a ripristinare la nostra istanza è improbabile che il dato a cui puntava c sia ancora nella stessa posizione, A e B sono invece proprietà che non portano con se dati propri ma fanno riferimento alle variabili a e b. Pertanto capiamo subito che per salvare lo "stato" di un istanza di Foo dobbiamo scriverci da qualche parte i soli valori a e b, per poi, in caso andremo a ricreare la nostra istanza di Foo recupereremo e riscriveremo al posto giusto cioè a e b.
In C++ non so se esistono delle funzioni già fatte che permettano la serializzazione di una classe come in .NET, ma in ogni caso, a mio avviso, è bene scrivere i metodi che permettono serializzazione e de serializzazione di tasca propria.
Analizziamo (solo) il caso Binario, io consiglio di impostare la nostra classe con un metodo Serialize che restituisca un array di byte facile da scrivere in un file di testo, quindi prendiamo la variabile a, la convertiamo in array di byte e facciamo lo stesso con b, uniamo i due array e li restituiamo, ora all'esterno della classe possiamo fare diverse operazioni, scriverlo su un file binario, inviarlo attraverso socket, scriverlo in un database, ecc...
Per recuperare l'istanza invece dobbiamo crearci un costrutto della classe Foo che accetti un array di byte e si occupi di rigenerare l'istanza, quindi andiamo a leggere il nostro file preleviamo il numero di byte che ci occorrono in questo caso sizeof(int)*2 e li passiamo a Foo(byte[] b) ora il nostro costrutto dovrà fare le operazioni inverse di Serialize leggera quanti byte compongo la prima variabile, li preleverà dalla nostra matrice b e la ripristinerà e via cosi per tutte le variabili.
Ho cercato di buttarti li i concetti base, se non dovessi capire qualcosa chiedi pure e vedremo di far luce sui tuoi dubbi