Бинарные файловые потоки.
От: Olmer.k  
Дата: 19.01.09 16:07
Оценка:
Есть класс
class Expenses {
private:
char * surname;
int age;
int sex; //0 — Female, 1 — Male;
TExp exp;
Array <double> profit;
public: //...
}

class TExp {
private:
Array <double> home;
Array <double> luxury;
public: //...
}

template <class T>
class Array {
private:
T * x;
int size;
public: //...
}

создаю объект класса Expenses. Подскажите как его записать в бинарный файл с помощью потоков? Или хотя бы дайте ссылочку на что-то похожее?
c++ stream
Re: Бинарные файловые потоки.
От: Sashaka Россия  
Дата: 19.01.09 17:21
Оценка:
Здравствуйте, Olmer.k, Вы писали:

читать "перегрузка операторов ввода/вывода", например здесь
(поиск: "20.4. Перегрузка оператора вывода", "20.5. Перегрузка оператора ввода")
Re: Бинарные файловые потоки.
От: chipmunk  
Дата: 19.01.09 20:28
Оценка:
Здравствуйте, Olmer.k, Вы писали:

OK>создаю объект класса Expenses. Подскажите как его записать в бинарный файл с помощью потоков? Или хотя бы дайте ссылочку на что-то похожее?


сделайте у каждого класса метод write, например для класса Expenses:
void write(std::ostream& out) {  
  out.write(surname, strlen(surname));   // или лучше записать сперва длину строки, потом саму строку
  out.write((char*)&age, sizeof(age));
  out.write((char*)&sex, sizeof(sex));
  exp.write(out);
  profit.write(out);
}

запись объекта Expenses в файл:
Expenses expenses;

ofstream out("file.bin", ios_base::binary);
if(out) {
  expenses.write(out);
}


P.S. этот способ правда не учитывает порядок байт (little endian или big endian) и размеры типов, но это актуально только если Вы пишите кросс-платформенное приложение
Re[2]: Бинарные файловые потоки.
От: Olmer.k  
Дата: 20.01.09 14:31
Оценка:
Спасибо большое!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.