Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Численные методы Здравствуйте уважаемые форумчане! Если вас не затруднит, не могли бы вы помочь мне с двумя задачами, просто я сам так и не смог разобраться, как надо делать... :cry: Здраствуйте форумчане! Если... https://www.cyberforum.ru/ cpp-beginners/ thread572608.html C++ команда удаления строки введенной с клавиатуры на C++
Вот написал программу. Надо удалить строку с данными после ее ввода. Объявил функцию void DelOldDate(), но как написать ее тело для удаления данных с типом возвращаемого значения string...
C++ Деление больших чисел https://www.cyberforum.ru/ cpp-beginners/ thread572577.html
Доброго времени суток. Спасите пожалуйста, как здесь быть:) Даны два числа. Ваша задача найти частное и остаток от деления. Input В первой строке дано делимое, во второй - делитель. Каждое...
C++ Кординаты мыши и нажатие клавишы у меня 2 вопроса: 1)Как определить координату мышки только по Y и записать её в переменную 2)Как отловить нажатую клавишу, если у меня программа в консоле и я её сворачиваю, и нажимаю mouse3 на... https://www.cyberforum.ru/ cpp-beginners/ thread572570.html
Ошибка C++
Здравствуйте, вот сделал задание, а мне VS2010 выдаёт такую ошибку: First-chance exception at 0x75d1e37d in Tree.exe: 0x40010005: Control-C. Что это?:(
C++ Разобрать пример указателя на символьный массив void main() { const N=256; char S="zzzzz"; char *s={""}; s=&S; *s="xxxxxxxx"; cout<<*s<<endl; https://www.cyberforum.ru/ cpp-beginners/ thread572566.html
C++ Комментарии к программе Есть программа которая считывает текст из файла и выводит только предложения,содержащие введенное с клавиатуры слово!!Помогите разобраться с кодом идущим со строчки std::ifstream in("file.txt"); ... https://www.cyberforum.ru/ cpp-beginners/ thread572562.html C++ OpenGL, проблема с функциями.
Проблема состоит в том, что если я пытаюсь перенести параметры создания окна в OpenGL в функцию то окно не создается, а если в майн то все нормально работает. #include <GL/glut.h> using...
C++ Алгоритм цепочка (исправить код) https://www.cyberforum.ru/ cpp-beginners/ thread572547.html
Условие Задан набор неповторяющихся пар (Ai,Aj), где Ai, Aj принадлежат множеству А={A1,A2,…,An}. Необходимо составить цепочку максимальной длины по следующему правилу: (Ai,Aj)+(Aj,Ak)=(Ai,Ak)....
C++ Помогите дописать( исправить код) алгоритм https://www.cyberforum.ru/ cpp-beginners/ thread572539.html
Условие Некоторые компании являются совладельцами других компании, так как приобрели часть их акций. Говорят, что компания А контролирует компанию В, если имеет место по меньшей мере одно из...
C++ Небольшой баг
Дана очень простая задачка: Даны числа a0, X, Y, M. Рассмотрим бесконечную последовательность ai = (X * ai-1 + Y) mod M, где операция "a mod b" означает остаток от деления числа a на число b....
C++ Структура. https://www.cyberforum.ru/ cpp-beginners/ thread572531.html
Добрый вечер..пишу уже 3 раз=) Я сделал задание По умолчанию Картотека в бюро обмена квартир (связные списки, файлы и т.д.) Всем Здрасьте) Вот задание:Картотека в бюро обмена квартир организован...
Kos87
22.05.2012, 12:40 0

Сохранение и чтение объекта класса в файл/из файла - C++ - Ответ 3064772

22.05.2012, 12:40. Показов 13182. Ответов 2
Метки (Все метки)

Ответ

Проблема решилась. Суть в том чтобы читать по "стрингам" с файла, и писать в него также, используя пробелы как разделители. Вот правильный код:
Также прикрепляю готовый проект (Visual Studio 2010).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// Base.h
#pragma once
#include "Header.h"
#include "Person.h"
 
class Base
{
public:
    Base(void);
    ~Base(void);
    static vector<Person> base;
    static bool successful_add; // контролирует был ли добавлен элемент в вектор
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// Base.cpp
#include "Base.h"
 
vector<Person> Base::base;
bool Base::successful_add = false;
 
Base::Base(void)
{
}
 
Base::~Base(void)
{
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Person.h
#pragma once
#include "Header.h"
 
class Person
{
public:
    Person(void);
    ~Person(void);
    bool operator<(const Person&) const;
    
    wstring name, surname, phone, full_name, lower_name, lower_surname;
    int age;
private:
    friend wofstream& operator<<(wofstream& out, const Person &p);
    friend wifstream& operator>>(wifstream& in, Person &p);
};
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
// Person.cpp
#include "Person.h"
 
Person::Person(void)
{
    age = 0;
}
 
Person::~Person(void)
{
}
 
bool Person::operator<(const Person& p) const
{
    return wcsicmp(full_name.c_str(), p.full_name.c_str()) < 0 ? true : false; // если первая строка меньше второй
}
 
wofstream& operator<<(wofstream& out, const Person &p)
{
    out<<p.surname<<L' '<<p.name<<L' '<<p.age<<L' '<<p.phone<<L'\n';
 
    return out;
}
 
wifstream& operator>>(wifstream& in, Person &p)
{
    in>>p.surname;
    in.get();
    in>>p.name;
    in.get(); // убираем один символ, в нашем случае пробел
    in>>p.age;
    in.get();
    in>>p.phone;
    in.get(); // забираем символ конца строки
 
    p.full_name = p.surname + L' '+ p.name;
    
    /* преобразовываем строки для поиска */
    for(int i=0; i<p.name.size(); ++i)
        p.lower_name.push_back( tolower(p.name[i]) );
 
    for(int i=0; i<p.surname.size(); ++i)
        p.lower_surname.push_back( tolower(p.surname[i]) );
 
    return in;
}
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
void MainWindow::SaveToFile()
{
    /* пишем в файл целым классом как одним блоком */
    wofstream out("base.txt", ios::trunc);
 
    for(int i=0; i<Base::base.size(); ++i)
        out<<Base::base[i];
 
    out.close();
}
 
void MainWindow::LoadFromFile()
{
    wifstream in("base.txt");
    
    if(!in) // проверка - существует ли такой файл
        MessageBox(hDialog, L"File does not exist!", L"Error", MB_OK|MB_ICONERROR);
    else
    {
        /* чистим ListBox и Vector */
        SendMessage(hName_list, LB_RESETCONTENT, 0, 0);
        Base::base.clear();
        
        /* пишем в наш вектор с файла целым классом */
        char ch;
        while(true)
        {
            ch = in.get();
            if(in.eof() || in.fail()) break;
            in.putback(ch);
 
            Base::base.push_back(Person());
            in>>Base::base.back();
 
            /* выводим элемент в ListBox */
            ListBox_AddString(hName_list, Base::base.back().full_name.c_str());
        }
 
        in.close();
    }
}


Вернуться к обсуждению:
Сохранение и чтение объекта класса в файл/из файла C++
Вложения
Тип файла: zip 15_dz_PersonalInfo.zip (2.17 Мб, 104 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2012, 12:40
Готовые ответы и решения:

Запись и чтение объекта класса в файл и из файла
У меня есть std::list состоящий из объектов типа Person это база о людях. Нужно реализовать два...

Запись объекта класса в файл и чтение из файла (Вызвано необработанное исключение: нарушение доступа для чтения)
Доброго времени суток. Вообщем-то есть некий класс Weapons: class Weapons { public: void...

Сохранение класса в файл и его чтение
К примеру Human (главное то, что в нем есть string): class Human{ public: string name; }; ...

Чтение данных для объекта класса из файла
Доброе время суток, подскажите метод как прочитать из бинарного файла некий текст в обьект своего...

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2012, 12:40
Помогаю со студенческими работами здесь

Чтение из файла и сохранение в файл
Здравствуйте. Работаю с текстовым файлом формата .txt. Считывается текст из файла, который затем...

Добавить вывод в файл и чтение из файла объектов класса
Добавить вывод в файл и чтение из файла объектов класса. Работа должна отображаться на мониторе....

Вывод в файл и последующее чтение из файла объектов класса
Как наиболее правильно и канонично выводить (так чтобы потом ещё и прочитать) объекты классов в...

Сохранение массива в файл и чтение массива из файла
Имеется массив: int region_coordinates; Надо его записать в файл(неважно, в каком формате,...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru