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

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

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Консоль, класс, методы класса: БД и файл? - C++

05.09.2013, 19:04. Просмотров 648. Ответов 13
Метки нет (Все метки)

Добрый вечер.

Не знаю как лучше сделать, подскажите пожалуйста!

Сейчас мы работаем с классами, пишем свои классы, подклассы (потомки), реализуем методы класса (то бишь функции).

У меня функции: чтения из файла, запись в файл. Какой именно файл -- не сказано.
В классе есть несколько полей, например, кол-во городов и название страны.

Теперь возникло несколько вопросов:

1) как несколько полей хранить в файле? Я знаю txt файл, тогда записывать туда строчками, что ли?
например:

Бумбум 123 (строчка)
пурумпум 230 (строчка)
...
или же делать отдельные txt файлы под своё поле?
Т.е., 10 полей, 10 файлов.
*при условии, что все поля будут заполнятся, а начальное значение (в классе) no_name и 0.

2) можно ли к exe файлу подключить БД? Как это осуществить? Ещё нужна будет "запись в файл". Сделаем условие, что БД обязательно есть. БД можно или MySQL, или Microsoft access, или ещё какую.

3) В данном случае что лучше использовать, БД или файл? На муторность подключения не смотрим, всё же знания есть важный фактор)))


4) в методах класса есть запись в файл и чтение из файла. В прошлый раз, когда я использовала "чтение из файла", я сначала проводила чтение в вектор, потом закрывала файл, а потом работала с вектором. Если надо было сделать "чтение из файла", то я выводила вектор.
Как поступить здесь? Если у нас ещё есть возможность добавления запись в файл, а значит:
а) записать в вектор, потом в файл
б) записать в файл, потом добавить в вектор
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.09.2013, 19:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Консоль, класс, методы класса: БД и файл? (C++):

Класс шаблон и методы класса - C++
Есть такой класс-список прямо из учебника павловской: template <class Data> class List{ class Node{ Data d; Node *next; ...

Вынести класс и методы класса в отдельные файлы - C++
Здравствуйте, написала программу для дробей. Теперь нужно создать отдельный файл для класса и для метода, что бы только вызывать их в...

Перенести методы дружественного класса в подключаемый файл - C++
Добрые люди, в отчаянии прошу помощи. Голова уже пухнет, не могу понять что куда откуда и как. Необходимо перенести описание всех методов...

Создать класс Triad (тройка чисел) - определить методы; определить производный класс Date - переопределить методы - C++
Создать класс Triad (тройка чисел); определить методы увеличения полей на 1. Определить производный класс Date с полями: год, месяц и день....

Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы - C++
Разработать классы для описанных ниже объектов. Включить в класс методы set (…), get (…), show (…). Определить другие методы Abiturient:...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template <class T> class matrix { friend class diagonal; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
05.09.2013, 19:36 #2
Если хотите записать данные класса в файл, то придется записывать каждое поле... что-то типа

C++
1
2
3
4
5
6
7
 fstream fout("Ваш файл", ios_out| ios_trunc);
  if (!fout)
   {
        cout << "Error. I can't open the file";
        return;
   }
  fout.write((char*)&size, sizeof(int));
...если size - поле класса целочисленного типа... В таком же духе и считывание производить из файла...
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
05.09.2013, 19:48  [ТС] #3
Цитата Сообщение от lesha1980 Посмотреть сообщение
Если хотите записать данные класса в файл, то придется записывать каждое поле... что-то типа
а сколько полей, столько и файлов или как в файл именно записывать?
В одну строчку несколько полей, или, например, у меня 4 поля, то чтобы записать 1 класс -- надо использовать 4 строки в файле.
0
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
05.09.2013, 20:05 #4
Цитата Сообщение от Nullik Посмотреть сообщение
а сколько полей, столько и файлов или как в файл именно записывать?
В одну строчку несколько полей, или, например, у меня 4 поля, то чтобы записать 1 класс -- надо использовать 4 строки в файле.
В один бинарный или же текстовый файл вам потребуется записать каждое поле своего класса. Вы создаете поток для записи
C++
1
fstream fout("Ваш файл (Путь к файлу здесь прописываете)", ios::out);
Для считывания придется сделать так:
C++
1
fstream in("Ваш файл", ios::in);
Затем применить проверку на открытие файла, если файл открыт делаете запись

C++
1
fout.write((char)*&ваше_поле, sizeof(тип значения вашего поля));
...для двух полей
C++
1
2
fout.write((char)*&1ваше_поле, sizeof(тип значения вашего поля));
fout.write((char)*&2ваше_поле, sizeof(тип значения вашего поля));
...для трех аналогично и так далее...
А для считывания

C++
1
in.read((char)*& Ваше_поле, sizeof(тип значения вашего поля));
не забудьте закрыть открытый поток

Для считывания и записи придется открывать отдельные потоки...
1
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
05.09.2013, 20:16  [ТС] #5
lesha1980, ну и считывание аналогично записи. Оооооок. Большое спасибо!!!))
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 07:13 #6
Для записи полей класса не обязательно использовать бинарные методы, можно и текстовые (а если работаете бинарными методами, то и файл открывайте в бинарном режиме). Бинарные, обычно, используются, когда записывается или читается объект класса целиком (память под объектом/объект в память). Но возможность чтения/записи объекта класса целиком зависит от ряда условий: какие у него поля, есть ли виртуальные методы и пр.
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
06.09.2013, 08:05  [ТС] #7
поля такие:

(разумеется, тут не нужно писать правдивые данные, тут чисто "как работают...")
название страны
имя открывателя
кол-во городов
кол-во жителей


методы:
вывод на экран\чтение (хотя не очень поняла что именно надо выводить, если есть "чтение из файла)
запись в файл
чтение из файла
ввод данных (тоже не поняла, если есть "запись в файл)
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 08:46 #8
Цитата Сообщение от Nullik Посмотреть сообщение
поля такие:
Под тем какие поля, подразумевается не то, как они называются, а тип данных полей (простые типы, массивы, объекты классов, и т.д.)

Добавлено через 7 минут
Цитата Сообщение от Nullik Посмотреть сообщение
вывод на экран\чтение (хотя не очень поняла что именно надо выводить, если есть "чтение из файла)
Цитата Сообщение от Nullik Посмотреть сообщение
ввод данных (тоже не поняла, если есть "запись в файл)
Не понятно, что не понятно. Не путайте только ввод (он же чтение: из файла в код, с консоли(клавиатуры) в код) и вывод (он же запись: из кода в файл, из кода на консоль(на экран)).
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
06.09.2013, 09:55  [ТС] #9
Аааа, вот в чём разница)))

Поля можно любого типа, там были только названия.
Думаю, первые два строчкой, другие интом.
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 09:58 #10
Цитата Сообщение от Nullik Посмотреть сообщение
Думаю, первые два строчкой, другие интом.
Строчки бывают разные: массив char, с '\0' в конце (строка в стиле С), объект класса string (строка С++, с автоматическим управлением памятью).
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
06.09.2013, 13:58  [ТС] #11
объект класса string (строка С++, с автоматическим управлением памятью).
я думала "строчка" это и подразумевает. Ну оооок.))
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 21:28 #12
Цитата Сообщение от Nullik Посмотреть сообщение
объект класса string (строка С++, с автоматическим управлением памятью).
я думала "строчка" это и подразумевает. Ну оооок.))
Совершенно нет. И записывать в файл, объекты string, предлагаемым способом:
Цитата Сообщение от lesha1980 Посмотреть сообщение
fout.write((char)*&1ваше_поле, sizeof(тип значения вашего поля));
не имеет смысла, потому что память под объектом string (запись которой делается в этом примере) и строка, с которой связан этот объект - далеко не одно и тоже.
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
06.09.2013, 21:44  [ТС] #13
alsav22, и как тогда сделать?
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 22:02 #14
Текстовыми методами (функциями).
Чтобы конкретно что-то сказать, нужно видеть класс и это (если есть):
Цитата Сообщение от Nullik Посмотреть сообщение
в методах класса есть запись в файл и чтение из файла.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 22:02
Привет! Вот еще темы с ответами:

Методы класса внутри определения класса - C++
Все привет! Решил закрепить свои знания по C++, читаю Р.Лафоре - &quot;Объектро-ориентированное программирование в C++&quot;. В книге, на...

От класса "Файл" унаследовать класс "Зашифрованный файл" - C++
Помогите с задачей, пожалуйста! Определить объект файл с поддержкой операций создания, копирования, перемещения, удаления файла,...

Создать класс CheckerBoard (особенности строения класса - инициализация константных членов класса) - C++
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int xSize = 1; const int ySize = 1; class...

Класс: как обратиться к методу производного класса через итератор на базовый класс? - C++
Есть абстрактный и два порожденных. Хочу создать например list&lt;Base*&gt; list1; затем добавляю себе в список: ...


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

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

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