• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapisywanie klas w plikach binarnych c++

Object Storage Arubacloud
0 głosów
276 wizyt
pytanie zadane 24 kwietnia 2018 w C i C++ przez Dudman Nowicjusz (180 p.)

Cześć!

Pisząc pewien program natrafiłem na problem dotyczący zapisywania objektów w pliku binarnym. Mam zapisać objekt klasy TURN_BOARD, w którym znajduje się 64(plansza 8x8) wskaźników do objektów polimorficznej klasy Pole_TURN, w_których znajdują się po jednym wskaźniku do objektu klasy TURN_Entity.

W jaki sposób mam zapisać do pliku binarnego objekt klasy TURN_BOARD i jak mam go odczytywać z tego pliku?

Za wszystkie odpowiedzi serdeczne dzięki!

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

enum Pola_TURN{Empty,Forest,Water,Mountain,Ground,Fire};

class TURN_ENTITY
{
    char symbol;

    int x;
    int y;

    int quantity_Move;
    int hp;
    int force_attack;

    bool team;

public:

    TURN_ENTITY(int wx,int wy,char sym,int qm,int hpoints,int force,bool t);
    TURN_ENTITY(const TURN_ENTITY *w_something);
    ~TURN_ENTITY();

    void DELETEENTITY(TURN_ENTITY *w_cos);

    void show_char();

    TURN_ENTITY *w_next;
};

class Pole_TURN
{
    TURN_ENTITY *w_something;

    Pola_TURN Typ;
public:

    virtual void show_view(int ktory)=0;
    virtual void set_Entity(TURN_ENTITY* w_entity)=0;

    virtual Pola_TURN PodajTyp()=0;
    virtual void DeleteEntity()=0;
    virtual TURN_ENTITY * Podaj()=0;
};

class Empty_TURN                                 //klasa polimorficzna
:public Pole_TURN
{
    TURN_ENTITY *w_something;
    Pola_TURN Typ;
public:
    void show_view(int ktory);
    void set_Entity(TURN_ENTITY* w_entity);
    void DeleteEntity();
    TURN_ENTITY * Podaj();
    Pola_TURN PodajTyp();

    Empty_TURN();
};

class Forest_TURN                                 //klasa polimorficzna
:public Pole_TURN
{
    TURN_ENTITY *w_something;
    Pola_TURN Typ;
public:
    void show_view(int ktory);
    void set_Entity(TURN_ENTITY* w_entity);
    void DeleteEntity();
    TURN_ENTITY * Podaj();
    Pola_TURN PodajTyp();

    Forest_TURN();
    ~Forest_TURN();
};

class Water_TURN                                 //klasa polimorficzna
:public Pole_TURN
{
    TURN_ENTITY *w_something;
    Pola_TURN Typ;
public:
    void show_view(int ktory);
    void set_Entity(TURN_ENTITY* w_entity);
    void DeleteEntity();
    TURN_ENTITY * Podaj();
    Pola_TURN PodajTyp();

    Water_TURN();
    ~Water_TURN();
};

class Mountain_TURN                                 //klasa polimorficzna
:public Pole_TURN
{
    TURN_ENTITY *w_something;
    Pola_TURN Typ;
public:
    void show_view(int ktory);
    void set_Entity(TURN_ENTITY* w_entity);
    void DeleteEntity();
    TURN_ENTITY * Podaj();
    Pola_TURN PodajTyp();

    Mountain_TURN();
    ~Mountain_TURN();
};

class Fire_TURN                                 //klasa polimorficzna
:public Pole_TURN
{
    TURN_ENTITY *w_something;
    Pola_TURN Typ;
public:
    void show_view(int ktory);
    void set_Entity(TURN_ENTITY* w_entity);
    void DeleteEntity();
    TURN_ENTITY * Podaj();
    Pola_TURN PodajTyp();

    Fire_TURN();
    ~Fire_TURN();
};

class Ground_TURN                                 //klasa polimorficzna
:public Pole_TURN
{
    TURN_ENTITY *w_something;
    Pola_TURN Typ;
public:
    void show_view(int ktory);
    void set_Entity(TURN_ENTITY* w_entity);
    void DeleteEntity();
    TURN_ENTITY * Podaj();
    Pola_TURN PodajTyp();

    Ground_TURN();
    ~Ground_TURN();
};

class TURN_BOARD                                 //objekt tej klasy chce zapisać
{                                                //w pliku
    Pole_TURN *Pola[8][8];

public:

    TURN_BOARD(string level);
    ~TURN_BOARD();

    Pola_TURN Pobierz(int x,int y);
    void Set(int x,int y,char character,int qm,int hp,int fa,bool t);
    void Delete(int x,int y);
    void Copy(int zx,int zy,int dox,int doy);
    void SetPole(int x,int y,Pola_TURN What);

    void schowEntities();

    void view();
};

    

1 odpowiedź

0 głosów
odpowiedź 24 kwietnia 2018 przez j23 Mędrzec (194,920 p.)
Hint: serializacja..
komentarz 24 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)
Cześć. Mogę zadać pytanie?

Póki co nie mam czasu nawet napisać kilku linijek kodu, więc się pytam.

Czy da się binarnie zapisać liczby większe od 255? Wiesz o co mi chodzi, nie?
komentarz 24 kwietnia 2018 przez j23 Mędrzec (194,920 p.)
Da się.
komentarz 24 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)
Ale jak? Przecież char (unsigned) może przyjąć max 255
komentarz 24 kwietnia 2018 przez j23 Mędrzec (194,920 p.)

Przecież masz inne typy, które pomieszczą większe wartości, np. int.

komentarz 24 kwietnia 2018 przez Hiskiel Pasjonat (22,830 p.)
Przepraszam, teraz uświadomiłem sobie, że źle zrozumiałem zapisywanie danych binarne.
komentarz 24 kwietnia 2018 przez Dudman Nowicjusz (180 p.)

@j23, Mógłbyś wysłać linka do jakiejś strony, która dobrze wyjaśnia serializacje?

komentarz 24 kwietnia 2018 przez j23 Mędrzec (194,920 p.)

https://isocpp.org/wiki/faq/serialization <- tu jest jakieś wyjaśnienie. Użyj googla wpisując "object serialization in c++".

Podobne pytania

0 głosów
1 odpowiedź 445 wizyt
pytanie zadane 23 stycznia 2016 w C i C++ przez Mateusz Błaszczak Użytkownik (760 p.)
0 głosów
1 odpowiedź 219 wizyt
pytanie zadane 18 lutego 2017 w C i C++ przez JKluseczka Obywatel (1,430 p.)
0 głosów
2 odpowiedzi 178 wizyt
pytanie zadane 9 października 2019 w C i C++ przez enigmatycznyclay Bywalec (2,450 p.)

92,555 zapytań

141,403 odpowiedzi

319,559 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...