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

class/string/ifstream/ofstream - C++

Восстановить пароль Регистрация
 
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 12:07     class/string/ifstream/ofstream #1
Доброе время суток всем!! Люди я уперся в стену и буду признателен за помощь

date.h
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
#pragma once
#include <iostream>
#include <fstream>
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;
 
    date operator=(const date&a);
    friend ostream& operator<<(ostream& os,const date& a);
    friend istream& operator>>(istream& is, date& a);
    friend ofstream& operator<<(ofstream &fs,const date &a);
    friend ifstream& operator>>(ifstream &fs,date &a);
};
date.cpp

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
52
#include <iostream>
#include "date.h"
using namespace std;
    date::date()
    {
 
    }
    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;
    }
    date date::operator=(const date&a)
    {
        day=a.day;
        mounth=a.mounth;
        year=a.year;
        return *this;
    }
person.h
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
#pragma once
#include <iostream>
#include <string>
#include "date.h"
#include <fstream>
using namespace std;
class Person
{
    string name;
    string family;
    date birthday;
public:
    Person(){};
    Person(string aname,    string afamily  ,int d,int m,int y)
    {
        name=aname;
        family=afamily;
        birthday.set_day(d);
        birthday.set_mounth(m);
        birthday.set_year(y);
    }
    Person(const Person&a)
    {
        name=a.name;
        family=a.family;
        birthday=a.birthday;
    }
    friend ofstream& operator<<(ofstream&fs,const Person&a);
    friend ifstream& operator>>(ifstream&fs,Person&a);
    friend ostream& operator<<(ostream& os,const Person& a);
    friend istream& operator>>(istream& is, Person& a);
};
main.cpp
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>
#include <time.h>
#include "date.h"
#include <Windows.h>
#include "Person.h"
using namespace std;
ostream& operator<<(ostream& os,const date& a)
{
    os<<a.day<<",";
    os<<a.mounth<<",";
    os<<a.year<<endl;
    return os;
}
istream& operator>>(istream&is,date&a)
{
 
    cout<<"enter day=";
    is>>a.day;
 
    cout<<"enter mounth=";
    is>>a.mounth;
 
    cout<<"enter year=";
    is>>a.year;
    return is;
}
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,const 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;
}
 
 ostream& operator<<(ostream& os,const Person& a)
 {
     os<<a.name<<endl;
     os<<a.family<<endl;
     os<<a.birthday<<endl;
     return os;
 }
 istream& operator>>(istream& is, Person& a)
 {
     cout<<"enter name=";
     is>>a.name;
     cout<<"enter family";
     is>>a.family;
     is>>a.birthday;
     return is;
 }
ofstream& operator<<(ofstream&fs,const Person&a)
{
    fs<<a.birthday;
    fs<<a.name<<" ";
    fs<<a.family;
    return fs;
}
ifstream& operator>>(ifstream&fs,Person&a)
{
    fs>>a.birthday;
    fs>>a.name;
    fs>>a.family;
    return fs;
}
 
void main()
{
    Person alex("alex","forokin",6,10,1999);
    Person dima("dima","falonov",12,11,1975);
    Person ksu("ksu","britva",8,10,1986);
 
    ofstream f("test.bin",ios::binary);
    f<<alex;
    f<<dima;
    f<<ksu;
    f.close();
 
    Person aleks;
    Person dimon;
    Person ksu2;
    ifstream f1("test.bin",ios::binary);
    f1>>aleks;
    f1>>dimon;
    f1>>ksu2;
    f1.close();
 
    cout<<aleks<<endl;
    cout<<dimon<<endl;
    cout<<ksu2<<endl;
 
 
}

Вообщем много уже чего пробовал правда ввиду отсутствия примера сделать правильно и коректно не выходит надеюсь кому не сложно подскажит или покажит как правильно должен выглядить перегруженый ifstream ofstream для класса person содержашего string такжи былбы признателен дажи за простой пример подобного плана!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2013, 12:07     class/string/ifstream/ofstream
Посмотрите здесь:

C++ ifstream/ofstream/fstream
Функции ifstream , ofstream. Исправить C++
сокращенная запись ifstream и ofstream C++
C++ C++ файлы ifstream/ofstream
Пример class+string+ofstream/ifstream C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
08.08.2013, 13:02     class/string/ifstream/ofstream #2
Попробуйте вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ofstream& operator<<(ofstream&fs,const Person&a)
{
    fs.write((char*)&a.birthday,sizeof(date));
    fs.write((char*)&a.name,sizeof(string));
    fs.write((char*)&a.family,sizeof(string));
    return fs;
}
ifstream& operator>>(ifstream&fs,Person&a)
{
    fs.read((char*)&a.birthday,sizeof(date));
    fs.read((char*)&a.name,sizeof(string));
    fs.read((char*)&a.family,sizeof(string));
    return fs;
}
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
08.08.2013, 13:09     class/string/ifstream/ofstream #3
Цитата Сообщение от alex1392 Посмотреть сообщение
cout<<"enter day="; is>>a.day;
Фигня это. cout - стандартный поток вывода, а is - произвольный поток ввода. Вот читаешь данные из файла, а у тебя на экране "Введите день:" - хренотень.

Добавлено через 2 минуты
Тем более ifstream/ofstream - наследник istream/ostream, не нужно рожать одну и туже фигню для разных типов потоков.
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 13:13  [ТС]     class/string/ifstream/ofstream #4
Цитата Сообщение от Valentina Посмотреть сообщение
Попробуйте вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
ofstream& operator<<(ofstream&fs,const Person&a)
{
    fs.write((char*)&a.birthday,sizeof(date));
    fs.write((char*)&a.name,sizeof(string));
    fs.write((char*)&a.family,sizeof(string));
    return fs;
}
ifstream& operator>>(ifstream&fs,Person&a)
{
    fs.read((char*)&a.birthday,sizeof(date));
    fs.read((char*)&a.name,sizeof(string));
    fs.read((char*)&a.family,sizeof(string));
    return fs;
}

спс за помощь вроди так работает ) если не трудно не моглибы вы обьяснить принцип так как я не понимаю как оно определяет sizeof(string) дажи немного в панике )
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
08.08.2013, 13:16     class/string/ifstream/ofstream #5
Цитата Сообщение от alex1392 Посмотреть сообщение
fs.write((char*)&a.name,sizeof(string));
Как по мне, так это полнейший бред. Чтобы это доказать, достаточно записать в файл, выйти из программы, снова зайти и прочитать из файла.
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 13:19  [ТС]     class/string/ifstream/ofstream #6
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Как по мне, так это полнейший бред. Чтобы это доказать, достаточно записать в файл, выйти из программы, снова зайти и прочитать из файла.
агась (
печаль а можиш дать свой вариант плиз ибо не знаю что еше делать )
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,340
08.08.2013, 13:52     class/string/ifstream/ofstream #7
Как0то так, но не проверял.
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
ofstream& operator<<(ofstream& os,const Person& a)
 {
     os.write(&a.birthday, sizeof(date));
     int len = a.name.length() + 1;
     os.write(&len, sizeof(int));
     os.write(a.name.c_str(), len);
     len = a.family.length() + 1;
     os.write(&len, sizeof(int));
     os.write(a.family.c_str(), len);     
     
     return os;
 }
 ifstream& operator>>(ifstream& is, Person& a)
 {
     is.read(&a.birthday, sizeof(date));
     int len;
     is.read(&len, sizeof(int));
     char *buf = new char[len];
     is.read(buf, len);
     a.name = buf;
     delete[] buf;
     is.read(&len, sizeof(int));
     buf = new char[len];
     is.read(buf, len); 
     a.family = buf;
     delete[] buf;
     return is;
 }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 14:23     class/string/ifstream/ofstream
Еще ссылки по теме:

ifstream ofstream C++
Перегрузка ifstream и ofstream? C++
Работа с потоками ofstream/ifstream C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 14:23  [ТС]     class/string/ifstream/ofstream #8
Спасибо все работает после небольшой правки конечный вариант выглядит вот так :
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
ofstream& operator<<(ofstream& os,const Person& a)
 {
     os<<a.birthday;
     //os.write((char*)&a.birthday, sizeof(date));
     int len = a.name.length() + 1;
     os.write((char*)&len, sizeof(int));
     os.write(a.name.c_str(), len);
     len = a.family.length() + 1;
     os.write((char*)&len, sizeof(int));
     os.write(a.family.c_str(), len);     
     
     return os;
 }
 ifstream& operator>>(ifstream& is, Person& a)
 {
     is>>a.birthday;
     //is.read((char*)&a.birthday, sizeof(date));
     int len;
     is.read((char*)&len, sizeof(int));
     char *buf = new char[len];
     is.read(buf, len);
     a.name = buf;
     delete[] buf;
     is.read((char*)&len, sizeof(int));
     buf = new char[len];
     is.read(buf, len); 
     a.family = buf;
     delete[] buf;
     return is;
 }
Yandex
Объявления
08.08.2013, 14:23     class/string/ifstream/ofstream
Ответ Создать тему
Опции темы

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