Maria ->∞
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,335
Записей в блоге: 1
1

Запись в файл объекта класса

06.05.2016, 19:34. Показов 10197. Ответов 5
Метки нет (Все метки)

Добрый вечер,предположим есть подобный класс,с полями :

C++
1
2
3
4
5
6
7
8
9
10
const SIZE = 10;
 
class myClass {
       public:
       int  arr[SIZE];
       int m;
       ...
 
 
};
1. Каким образом я могу записать и считать переменную типа myClass в файл?
2. И может ли чтение уже вычисленных данных этого типа из файла и совершение операции над этими данными увеличить скорость,по сравнению с тем, если бы я сначала вычислял эти данные в программе,а потом применял операцию между элементами. (То есть в файле уже будут хранится нужные вычисленные элементы, останется только считать и выполнить операцию между ними...)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2016, 19:34
Ответы с готовыми решениями:

Запись в файл объекта класса
class Object { private: int myN; std::vector<std::string> myLines; public: ...

Запись объекта класса в файл
Здравствуйте, может кто-нибудь помочь с данным вопросом? Как мне записать в файл строку, которая...

Запись объекта класса в файл
Доброго времени суток! нужно сохранить объект вот такого класса: class Act { public: ...

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

5
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
06.05.2016, 21:25 2
Лучший ответ Сообщение было отмечено DmitryM5 как решение

Решение

Так?
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
#include <iostream>
#include <fstream>
 
const int SIZE = 10;
 
class myClass {
public:
    int arr[SIZE];
    int m;
 
    // ..
};
 
int main() {
 
    myClass testVar;
    testVar.m = 228;
 
    std::ofstream outFile;
    outFile.open("test.txt", std::ios::binary); // в двоичном
 
    if (!outFile) { // if (outFile.fail()) тоже можно
        // проверишь на ошибки
    }
 
    outFile.write(reinterpret_cast<char*>(&testVar), sizeof(testVar));
 
    outFile.close(); // закрываешь
 
    std::ifstream inFile;
    inFile.open("test.txt", std::ios::binary); // в двоичном
 
    if (!inFile) {
        // проверишь на ошибки
    }
 
    myClass another_testVar;
 
    inFile.read(reinterpret_cast<char*>(&another_testVar), sizeof(myClass));
 
    std::cout << another_testVar.m << "\n";
 
    inFile.close(); // закрываешь
 
    std::cin.get();
}
Добавлено через 22 минуты
Полезные штуки про read и write.

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

Что-то на подобии этого я имею ввиду:
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
#include <iostream>
#include <fstream>
 
const int SIZE = 10;
 
class myClass {
public:
    int arr[SIZE];
    int m = SIZE; // не знаю зачем эта переменная, но если она у тебя есть в примере, пусть остается
 
    void fill() { for (int i = 0; i < SIZE; i++) arr[i] = i + 1; }
    // ..
};
 
int main() {
 
    //------------------------------------------------------------------------
 
    myClass testVar;
    testVar.fill();
    testVar.m = 400;
 
    //------------------------------------------------------------------------
 
    std::ofstream outFile;
    outFile.open("test.txt");
 
    if (!outFile) {
        std::cout << "Ошибка!\n";
        std::cin.get();
        return -1;
    }
 
    //------------------------------------------------------------------------
 
    // пишем
    for (int i = 0; i < SIZE; i++)
        outFile << " " << testVar.arr[i];
    outFile << "; " << testVar.m << ";\n";
 
    // закрываем
    outFile.close();
 
    //------------------------------------------------------------------------
 
    myClass another_testVar;
 
    //------------------------------------------------------------------------
 
    std::ifstream inFile;
    inFile.open("test.txt");
 
    if (!inFile) {
        std::cout << "Ошибка!\n";
        std::cin.get();
        return -1;
    }
 
    //------------------------------------------------------------------------
 
    // читаем
    for (int i = 0; inFile.get() != ';'; i++)
        inFile >> another_testVar.arr[i];
    inFile >> another_testVar.m;
 
    // закрываем
    inFile.close();
 
    //------------------------------------------------------------------------
 
    // печатаем
    std::cout << "\narr = ";
    for (int i = 0; i < SIZE; i++)
        std::cout << another_testVar.arr[i] << "; ";
    std::cout << "\nm = " << another_testVar.m << "\n";
 
    //------------------------------------------------------------------------
    std::cin.get();
}
Миниатюры
Запись в файл объекта класса  
1
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
06.05.2016, 21:30 3
Цитата Сообщение от DmitryM5 Посмотреть сообщение
И может ли чтение уже вычисленных данных этого типа из файла и совершение операции над этими данными увеличить скорость,по сравнению с тем, если бы я сначала вычислял эти данные в программе,а потом применял операцию между элементами. (То есть в файле уже будут хранится нужные вычисленные элементы, останется только считать и выполнить операцию между ними...)
А на этот вопрос не отвечу, потому что его не понял сори
1
Maria ->∞
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,335
Записей в блоге: 1
06.05.2016, 21:39  [ТС] 4
Цитата Сообщение от meJevin Посмотреть сообщение
А на этот вопрос не отвечу, потому что его не понял сори
Такс, описанный выше пример это примерные поля моего класса.
Класс является неким представлением чисел с плавающей точкой (double)...
Что я делал раньше, вычислял в цикле выражения,которые имеют тип double,далее типы double эти переводил к моему типу myClass допустим, и выполнял операцию между ними определенную для класса myClass.В итоге получал результат типа myClass.

Теперь я хочу не вычислять в цикле выражения типа double и не переводить к типу myClass,а сразу записать в файл нужные элементы типа myClass.То есть в файле хранятся элементы типа myClass.
Потом отдельно я что делаю,читаю данные с файла и выполняю над ними операцию! (То есть не делаю вычисления и приведения к типу myClass).
Вот и вопрос работа с файлом быстро происходит?Смогу ли я выиграть время,по сравнению с вычислением и приведением к типу...
0
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
06.05.2016, 21:57 5
DmitryM5, ой, я отвечать на этот вопрос не особо хочу, потому что сам не так долго с файлами занимаюсь в С++ и могу дезинформировать, сам этого не осознавая. Так что я просто помог, чем смог, как говорится. Лучше подождать "больших дядек", они точно помогут)
0
Maria ->∞
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,335
Записей в блоге: 1
06.05.2016, 22:00  [ТС] 6
Цитата Сообщение от meJevin Посмотреть сообщение
DmitryM5, ой, я отвечать на этот вопрос не особо хочу, потому что сам не так долго с файлами занимаюсь в С++ и могу дезинформировать, сам этого не осознавая. Так что я просто помог, чем смог, как говорится. Лучше подождать "больших дядек", они точно помогут)
Ладно,благодарю)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2016, 22:00
Помогаю со студенческими работами здесь

Запись объекта класса с контейнером set в бинарный файл C++
Доброго времени суток! Пишу курсовую по теме &quot;Работа с множествами&quot;. Хочу реализовать код через...

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

ООП. header файл. Функцию объекта вынести в файл класса
#ifndef DRAW_H #define DRAW_H #include &quot;mainwindow.h&quot; #include &quot;ui_mainwindow.h&quot; #include...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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