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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
#1

class/string/ifstream/ofstream - C++

08.08.2013, 12:07. Просмотров 772. Ответов 7
Метки нет (Все метки)

Доброе время суток всем!! Люди я уперся в стену и буду признателен за помощь

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++):

Пример class+string+ofstream/ifstream - C++
Доброе время суток всем пресутствующим ) Если кому не сложно кинте пожалуйста сюда пример содержаший клас который содержит несколько полей...

ifstream ofstream - C++
как работают данные файловые операции, объясните пожалуйста куда происходит запись ена жёстком диске

C++ файлы ifstream/ofstream - C++
Доброе время суток нужна небольшая помощь с записью/считыванием из файла вообщем при считывание из файла eof() не определяет конца файла и...

Перегрузка ifstream и ofstream? - C++
Есть класс //test.h cass test { private: int i; string st; public:

ifstream/ofstream/fstream - C++
#include &lt;fstream&gt; fstream autosave; autosave.open(&quot;...autosave.txt&quot;); char x; autosave &lt;&lt; x; cout &gt;&gt;...

ifstream, ofstream и объекты класса - C++
Доброго времени суток, помогите пожалуйста разобраться. Есть некий класс: class Tr { public: Tr(){} ~Tr(){} private:

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
08.08.2013, 13:02 #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
902 / 641 / 130
Регистрация: 28.07.2012
Сообщений: 1,729
08.08.2013, 13:09 #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  [ТС] #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
902 / 641 / 130
Регистрация: 28.07.2012
Сообщений: 1,729
08.08.2013, 13:16 #5
Цитата Сообщение от alex1392 Посмотреть сообщение
fs.write((char*)&a.name,sizeof(string));
Как по мне, так это полнейший бред. Чтобы это доказать, достаточно записать в файл, выйти из программы, снова зайти и прочитать из файла.
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 13:19  [ТС] #6
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Как по мне, так это полнейший бред. Чтобы это доказать, достаточно записать в файл, выйти из программы, снова зайти и прочитать из файла.
агась (
печаль а можиш дать свой вариант плиз ибо не знаю что еше делать )
nonedark2008
902 / 641 / 130
Регистрация: 28.07.2012
Сообщений: 1,729
08.08.2013, 13:52 #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;
 }
alex1392
31 / 31 / 3
Регистрация: 24.07.2013
Сообщений: 187
08.08.2013, 14:23  [ТС] #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;
 }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2013, 14:23
Привет! Вот еще темы с ответами:

Сокращенная запись ifstream и ofstream - C++
#include &lt;fstream&gt; using namespace std; int main() { fstream I(&quot;input.txt&quot;), O(&quot;output.txt&quot;, 2); что означает второй...

Неправильно выполнение ifstream, ofstream - C++
Не происходит ни открытие файла, ни выполнение операций ввода-вывода ...

Работаем с потоками на C++ ofstream и ifstream - C++
Доброго времени суток! Подскажите пожалуйста, как при использовании ofstream и ifstream переставить курсор в начало файла?

Работа с потоками ofstream/ifstream - C++
Добрый вечер! Помогите, пожалуйста, с задачей! Дан класс: class data { char str; //дата представлена в виде строки “mm/dd/yy” ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.08.2013, 14:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru