Форум программистов, компьютерный форум CyberForum.ru

C++ файлы ifstream/ofstream запись класса - C++

Восстановить пароль Регистрация
 
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
25.07.2013, 17:45     C++ файлы ifstream/ofstream запись класса #1
Доброе время суток дамы и господа необходимо помочь ибо что-то голова не варит ))
класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#pragma once
#include <iostream>
using namespace std;
class date
{
    int day;
    int mounth;
    int year;
public:
    date();
    date(int d,int m,int y);
    date(const date&a);
    
    void set_day(int d);
    void set_mounth(int m);
    void set_year(int y);
 
    int get_day()const;
    int get_mounth()const;
    int get_year()const;
 
    void show();
    friend ostream& operator<<(ostream& os,date& a);
    friend ofstream& operator<<(ofstream&fs,date&a);
    friend ifstream& operator>>(ifstream&fs,date&a);
};
реализация
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include "date.h"
using namespace std;
    date::date()
    {
        day=0;
        mounth=0;
        year=0;
    }
    date::date(int d,int m,int y)
    {
        day=d;
        mounth=m;
        year=y;
    }
    date::date(const date&a)
    {
        day=a.get_day();
        mounth=a.get_mounth();
        year=a.get_year();
    }
    
    void date::set_day(int d)
    {
        day=d;
    }
    void date::set_mounth(int m)
    {
        mounth=m;
    }
    void date::set_year(int y)
    {
        year=y;
    }
 
    int date::get_day()const
    {
        return day;
    }
    int date::get_mounth()const
    {
        return mounth;
    }
    int date::get_year()const
    {
        return year;
    }
    void date::show()
    {
        cout<<day<<","<<mounth<<","<<year<<endl;
    }
запись/считывание/вывод
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
ostream& operator<<(ostream& os, date& a)
{
    os<<a.day<<",";
    os<<a.mounth<<",";
    os<<a.year<<endl;
    return os;
}
ifstream& operator>>(ifstream&fs,date&a)
{
    int sz=0;
 
    fs.read((char*)&sz, sizeof(int));
    fs.read((char*)&a.day,sz);
 
    fs.read((char*)&sz, sizeof(int));
    fs.read((char*)&a.mounth,sz);
 
    fs.read((char*)&sz, sizeof(int));
    fs.read((char*)&a.year,sz);
    return fs;
}
ofstream& operator<<(ofstream&fs,date&a)
{
    int sz=sizeof(int);
    fs.write((char*)&sz,sizeof(sz));
    fs.write((char*)&a.day,sz);
 
    fs.write((char*)&sz,sizeof(sz));
    fs.write((char*)&a.mounth,sz);
 
    fs.write((char*)&sz,sizeof(sz));
    fs.write((char*)&a.year,sz);
    return fs;
}
майн
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void main()
{   
    date z(6,10,1991);
    date m(26,10,1986);
    ofstream f("date.bin");
    f<<z;
    f<<m;
    f.close();
 
    date z1;
    date z2;
    ifstream f1("date.bin");
    
        f1>>z1;
        f1>>z2;
        cout<<z1<<endl;
        cout<<z2<<endl;
    
    f1.close();
вроди все основное кинул )) Подскажите плиз почему 1-вое считывает норм. а все последующее нет((
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2013, 17:45     C++ файлы ifstream/ofstream запись класса
Посмотрите здесь:

C++ ifstream/ofstream/fstream
C++ ifstream, ofstream и объекты класса
Функции ifstream , ofstream. Исправить C++
сокращенная запись ifstream и ofstream C++
C++ C++ файлы ifstream/ofstream
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.07.2013, 19:30     C++ файлы ifstream/ofstream запись класса #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void main()
{   
    date z(6,10,1991);
    date m(26,10,1986);
    ofstream f("date.bin", ios::binary);
    f<<z;
    f<<m;
    f.close();
 
    date z1;
    date z2;
    ifstream f1("date.bin", ios::binary);
    
        f1>>z1;
        f1>>z2;
        cout<<z1<<endl;
        cout<<z2<<endl;
    
    f1.close();
}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ifstream& operator>>(ifstream &fs,date &a)
{
    int sz=sizeof(int);
    fs.read((char*)&a.day,sz);
    fs.read((char*)&a.mounth,sz);
    fs.read((char*)&a.year,sz);
    return fs;
}
 
ofstream& operator<<(ofstream &fs,date &a)
{
    int sz=sizeof(int);
    fs.write((char*)&a.day,sz);
    fs.write((char*)&a.mounth,sz);
    fs.write((char*)&a.year,sz);
    return fs;
}
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
25.07.2013, 19:54  [ТС]     C++ файлы ifstream/ofstream запись класса #3
еше раз спс
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.07.2013, 20:19     C++ файлы ifstream/ofstream запись класса #4
C++
1
date m(26,10,1986);
Число 26 сбивает чтение (если текстовый режим). В текстовом режиме это код конца файла. Дальше чтение уже не идёт. Если заменить на другое число, то будет работать и в текстовом режиме, но так делать ненужно. Раз уж используете бинарный режим чтения/записи, то и файлы нужно открывать в таком режиме.
Yandex
Объявления
25.07.2013, 20:19     C++ файлы ifstream/ofstream запись класса
Ответ Создать тему
Опции темы

Текущее время: 18:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru