Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Serializácia a deserializácia c++

Registrovaný: 21.04.07
Prihlásený: 02.05.11
Príspevky: 204
Témy: 26
Príspevok NapísalOffline : 30.04.2011 19:22

Zdravím, mam ulohu do školy na c++, v ktorom mam spravit serializáciu a deserializáciu objektu. Kedže som to nejako nevedel spraviť v tom mojom projekte tak som si vymyslel niečo jednoduchšie aby som to pochopil ale aj tak som nepochodil:)

Tu je kod:
Kód:
#include <iostream>
#include <fstream>

using namespace std;

class Car
{
   public:
        Car(){};
        Car(int w, int s, int p)
        {
            this->Weight = w;
            this->MaxSpeed = s;
            this->Price = p;
        }
        void setWeight(int w){ this->Weight = w;}
        void setMaxSpeed(int s) {this->MaxSpeed = s;}
        void setPrice(int p){this->Price = p;}

        inline int getWeight() const {return Weight;}
        inline int getMaxSpeed() const {return MaxSpeed;}
        inline int getPrice() const {return Price;}

         friend ostream& operator<<(ostream &os,Car &c);
    private:
        int Weight;
        int MaxSpeed;
        int Price;
};

ostream& operator<<(ostream &os,Car &c)
{
    return(os << c.Weight << "  " << c.MaxSpeed << "  " << c.Price << endl);
}

class CarTrain
{
    public:
        CarTrain(){};
        CarTrain(int s){this->size = s;this->carstore = new Car[size];}
        void loadCar(int i,Car c){this->carstore[i] = c;}
        Car getCar(int i){return this->carstore[i];}
        int getSize(){return this->size;}
        friend ostream& operator<<(ostream &os,Car &c);
        void serialize(ostream& os)
         {
             Car tmp;
            for(int i=0; i <this->size; i++)
            {
                tmp =  this->carstore[i];
                os << tmp;
            }
         }
        CarTrain unserialize(ifstream& in)
        {
            CarTrain tmp; Car c;
            int w,s,p;
            tmp.size = this->size;
            for(int i=0; i< this->size;i++)
            {
                in>>w;
                in>>s;
                in>>p;

                c.setWeight(w);
                c.setMaxSpeed(s);
                c.setPrice(p);
                tmp.loadCar(i,c);
            }
            return tmp;
        }
    private:
        Car *carstore;
        int size;
};

ostream& operator<<(ostream &os,CarTrain &ct)
{
    Car tmp;
    for(int i=0; i < ct.getSize(); i++)
    {
        tmp =  ct.getCar(i);
        os << tmp;
    }
    return os;
}

int main()
{
    cout << "Serializacia a deserializacia" << endl;

    Car c1(1000,150,8000);
    Car c2(1200,190,9000);
    Car c3(1400,220,120000);

    CarTrain ct(10);
    ct.loadCar(0,c1);
    ct.loadCar(1,c2);
    ct.loadCar(2,c3);

    cout<<ct<<endl;
    char *p = "ser.txt";
    ofstream o;
    o.open(p,ios::out);
    ct.serialize(o);
    o.close();

    ifstream in;
    in.open(p,ios::in);
    CarTrain ct2 = ct.unserialize(in);
    in.close();


    return 0;
}



Problem je to že takto tá deserializácia nefunguje. Možno to bude aj tým že som asi uplne nepochopil pointu toho. A hlavne mam vyriešiť aj verzovanie objektov ale to nejako už vobec neviem:) Zatial som skušal textovu serializáciu. Poprosil by som niekoho kto sa tomu rozumie aby mi to trochu objasnil, resp. čo robim zle ..:) Ďakujem







_________________
------------------------------------------------------------------------------------------------------------------------------------
FSC Esprimo Mobile M9400
CPU:T5450(2x1.66GHz) GPU:X3100 RAM:4 GiB HDD:120GB + 500GB ext. WD OS:Windows 7 Pro 64bit LCD:LG W2253TQ
Keyboard & mouse:Logitech Cordless Desktop EX 110
Offline

Skúsený užívateľ
Skúsený užívateľ
Serializácia a deserializácia c++

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 01.05.2011 9:21

Neskusal som spustat tvoj kod, len som si narychlo preletel funkciu unserialize, ked vravis, ze ti nefunguje a problem zrejme bude v tom, ze:
Kód:
CarTrain unserialize(ifstream& in)
        {
            CarTrain tmp; Car c;
            int w,s,p;
            tmp.size = this->size;
            for(int i=0; i< this->size;i++)
            {
                in>>w;
                in>>s;
                in>>p;

                c.setWeight(w);
                c.setMaxSpeed(s);
                c.setPrice(p);
                tmp.loadCar(i,c);
            }
            return tmp;


Navratova hodnota je objekt CarTrain. Urcite vies, ze pri takomto odovzdani sa vytvori tzv plytka kopia objektu. To by nam postacovalo, ak by si v tejto triede nemal zadefinovany smernik. Tzn, riesenim bude napisanie kopirovacieho konstruktora. Neviem, ci to bude jediny problem, ale toto urcite budes musiet dopisat.
Este som si vsimol, ze premenna tmp je volana s prazdnym kontruktorom a jej clen carstore teda nema alokovanu pamat. Po volani metody loadCar sa zapisuje do nealokovanej pamate. To si budes musiet taktiez opravit. Dalej nemas destruktory, ktore by uvolnili alokovanu pamat. Taktiez to nie je velmi spravny postup.

// ratam s tym, ze vies, co je kopirovaci konstruktor, ako funguje, atd. Ak nie, tak napis, s cim treba pomoct


Offline

Užívateľ
Užívateľ
Serializácia a deserializácia c++

Registrovaný: 21.04.07
Prihlásený: 02.05.11
Príspevky: 204
Témy: 26
Príspevok Napísal autor témyOffline : 02.05.2011 10:34

No už som to vyriešil :) hlavny problem bol v tom že ked som inicializoval CarTrain tmp tak som zabudol alokovat pamät čiže spravne malo byt CarTrain tmp(size) napr. Hej viem o čom vraviš :) deštruktory som chcel dopísať ale najprv som potreboval vyriešiť tu serializaciu. Každopadne dakujem za odpoved :)







_________________
------------------------------------------------------------------------------------------------------------------------------------
FSC Esprimo Mobile M9400
CPU:T5450(2x1.66GHz) GPU:X3100 RAM:4 GiB HDD:120GB + 500GB ext. WD OS:Windows 7 Pro 64bit LCD:LG W2253TQ
Keyboard & mouse:Logitech Cordless Desktop EX 110
Odpovedať na tému [ Príspevkov: 3 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Mám sa učiť C ++/objective C/ C#?

v Assembler, C, C++, Pascal, Java

5

729

08.07.2014 20:40

XOLOO Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. rozdiel medzi Borland 3.1 C++ vs Net. C++

v Assembler, C, C++, Pascal, Java

4

574

20.07.2010 12:54

walther Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hledá se programátor C/C++ pro vesmírné projekty (Praha)

v Ponuka práce

0

1121

10.05.2016 14:59

evolvsys Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Naučte se C++ za 21 dní + C++Builder 6

v Assembler, C, C++, Pascal, Java

18

2411

21.05.2010 21:08

Wpegb Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. K: PC Literaturu- C++/C#/java/python/ruby/RoR

v Kúpim

0

409

13.05.2014 18:16

expresado Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hladam hracov na C&C Generals Zero Hour

v Počítačové hry

10

1247

07.03.2007 19:22

Spirit Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. aky je rozdiel medzi C++ a Visual C++ ?

v Assembler, C, C++, Pascal, Java

8

1962

19.02.2011 22:46

vendo2 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Čo mi treba na programovanie v C/C++

v Assembler, C, C++, Pascal, Java

17

1144

25.09.2011 18:14

reDo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hladame 3x C/C++ Linux developer- projekt 11/2016-2/2017

v Ponuka práce

1

551

24.10.2016 15:28

michalesku Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Darujem knihy o programovaní (HTML, Java, Visual C++, C++ Builder, Android)

v Vymením a darujem

0

428

01.04.2019 11:20

tomasteicher Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C - Ako prekompilovať .c súbor do .exe?

v Assembler, C, C++, Pascal, Java

7

555

02.11.2012 18:47

MasterMatoSK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. program na projekt (C#, C++, pascal, java)

v Assembler, C, C++, Pascal, Java

2

830

12.03.2009 12:08

Svjatogor Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C/C++ problém so súbormi a hodnotami

v Assembler, C, C++, Pascal, Java

2

308

09.12.2012 10:43

nBXXL Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C# alebo C++ , ktore knizky na ucenie?

v Assembler, C, C++, Pascal, Java

20

1790

12.02.2011 0:12

The Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C&C Generals : Zero Hour - turnaj

v Počítačové hry

0

774

25.02.2009 20:18

k0t0l Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C# alebo C++ appka/program na výpočty

v Assembler, C, C++, Pascal, Java

1

380

20.03.2015 22:36

walther Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra