Pokud je tvuj kod stale takovy jako na zacatku, tak:
-michas serializaci a deserializaci ruznymi zpusoby, jednou je na to metoda pak pretizeny operator, zvol si jednu variantu, udelej ser. i deser., pokud je nutna i jina moznost, pouzij to jiz udelane, nedelej stejnou vec na dvou ruznych mistech.
-nerozkladej ser/deser mezi ruzne objekty, Car se musi umet serializovat i deserializovat. CarTrain opet serializuje a deserializuje sebe, jen svou strukturu, tj. pole (u tebe deserializuje i Car, co kdyz se Car zmeni?)
-chteji po tobe verzovani, tj. poznamenat si u serializovanych dat verzi sveho serializeru, je to dulezite kdyz se aplikace vyvyji a ty ulozis data ve stare verzi a ted je chces nacist novou verzi, nebo opacne, nekdo ulozil data v nove verzi, ty mas stale starou a ta nerozumi novym datum, staci na to integer hodnota kterou zvysis pri zmene struktury objektu a kterou deserializer musi nacist a porovnat, zda ji podporuje, muzes to mit na urovni aplikace
- a moc neverim ze ti to funguje, podle mne to musi padnout na nepovoleny pristup do pameti, v metode CarTrain::deserialize(...) mas
CarTrain tmp; Car c;
tmp.size = this->size;
...
tmp.loadCar(i,c);
tmp poziva defaultni, nebo bezparametrovy konstruktor, telo konstruktoru mas prazdne, vnitrni promenne neinicializovane, zadne pole Car[] jsi tedy nealokoval, ale carstore ukazuje buh vi kam, to ze nastavis size neudela nic a pak pouzijes loadCar pro prepsani polozky s indexem i, no podle mne -> zuch.
Tak to jen tak par poznamek.