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

Мой класс для работы с файлами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Среднее значение элементов очереди http://www.cyberforum.ru/cpp-beginners/thread610228.html
Всем доброго времени суток. Задача такова. Имеется структура const int n=27; struct Transport { char surname; // фамилия char name; // имя char middleName; // отчество int amount; // количество вещей в багаже float weight; // вес багажа Transport *next; // указатель на следующий элемент };
C++ Красно-черное дерево (класс, шаблон и его реализация) всем привет, у меня возникла проблема в создании шаблона, в обычном виде т.е. в не шаблонном, он работает нормально НО как только пытаюсь сделать шаблон и поставить везде куда надо template так тут же куча ошибок вот хедер RBTree.h #pragma once #ifndef RBTREE #define RBTREE #include "item.h" typedef enum nodeColor { BLACK, RED } nodeColor; template <class Keytype> http://www.cyberforum.ru/cpp-beginners/thread610217.html
Прата - составные типы C++
Добрый день. Недавно начал заниматься С++ по книге Прата. Прошел четвертую главу и встретил такую задачу: Напишите программу С++, которая запрашивает и отображает информацию, как показано в следующем примере: What is your first name? Betty Sue What is your last name? Yew What letter grade do you deserve? B What is your age? 22 Name: Yew, Betty Sue Grade: C
C++ Создать иерархию типов. c++
Здравствуйте! Посмотрите пожалуйста программу. Правильно ли построены классы. Задание: Создать иерархию типов - транспорт, корабль, пассажирский транспорт и пассажирский корабль. Использовать виртуальные базовые классы. код: #include <iostream> #include <string.h> #include <Windows.h> using namespace std;
C++ "текст в базе" и действия на клавиши http://www.cyberforum.ru/cpp-beginners/thread610141.html
Короче мне нужно сделать так чтоб по нажатию на кнопку в файле по адрессу(залитому на сайт какойнить) проверялась наличие текста написанного в техтбоксе 1 например! И если текст есть то например открывалась другая форма, а если нету то выдавало ошибку=) Самому на ум не приходит+) и ещё 2 вопрос есть: хочу сделать так что-бы программа реагировала на нажатия например нум1 и активировала...
C++ Перемножение разреженных матриц Программа для перемножения разреженных матриц. все работает нормально, за исключением того, что при матрицах большого размера (1000+) считает от 10 минут и дольше. Помогите исправить код (как мне представляется надо избавиться от 3 циклов, но я не знаю как). Спасибо #include "stdafx.h" #include "assert.h" #include <iostream> #include <vector> #include <string> #include <conio.h> using... подробнее

Показать сообщение отдельно
Hagrael
БТР - мой друг
 Аватар для Hagrael
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
21.06.2012, 11:33  [ТС]     Мой класс для работы с файлами
Обернуть fstream я решил, потому что мне не нравится то, как названы встроенные данные и потому что в самом классе fstream нету некоторых функций, которые я реализовал в своем классе.

Про передачу по ссылке я тоже думал. Вначале я создал по 2 экземпляра каждой функции: один для работы с указателями, другой - для работы со ссылками. Но после решил, что смысл у этих функций будет один и тот же, хотя программисту передача по ссылке будет удобнее, и удалил вариант с ссылками.

Цитата Сообщение от Deviaphan Посмотреть сообщение
Так ты сможешь записывать POD объекты не указывая размер вручную, т.е. меньше шансов ошибиться
А у меня вроде бы и так указывать размер переменной не нужно:
C++
1
2
3
File file(...);
int n = 5;
file.write(&n);
Цитата Сообщение от Deviaphan Посмотреть сообщение
Кроме того, перед каждым объектом рекомендую сохранять размер этого объекта. А ещё лучше и версию его сохранять.
А вот этого я не понял

Добавлено через 1 минуту
Вот, кстати, последний вариант класса:
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <fstream>
 
class File {
    private:
        std::fstream file;
    public:
        // конструкторы и деструктор:
 
        inline File () {}
 
        inline File (char* name, long int mode) {
            Open(name, mode);
        }
 
        inline ~File () {
            Close();
        }
 
 
        // открытие и закрытие файла:
 
        inline void Open (char* name, long int mode) {
            file.open(name, std::ios::openmode(mode));
        }
 
        const static long int forAppend = 1L << 0;
        const static long int moveToEnd = 1L << 1;
        const static long int asBinary = 1L << 2;
        const static long int forInput = 1L << 3;
        const static long int forOutput = 1L << 4;
        const static long int truncate = 1L << 5;
 
        inline bool OpenAndCheck (char* name, long int mode) {
            Open(name, mode);
            return IsAllRight();
        }
 
        inline bool IsOpened () {
            return file.is_open();
        }
 
        inline void Close () {
            file.close();
        }
 
        // чтение файла:
 
        template <class type> inline void ReadContent (type* pointer, int length) {
            file.read(reinterpret_cast<char*>(pointer), length);
        }
 
        inline void ReadContent (char* pointer, int length) {
            file.read(pointer, length);
        }
 
        inline void ReadString (char* pointer, int length) {
            file.read(pointer, length);
            *(pointer+length) = '\0';
        }
 
        inline void ReadString (char* pointer) {
            char ch;
            int i = 0;
 
            ReadContent(&ch, 1);
            while (ch != '\0') {
                *(pointer+i) = ch;
                i++;
                ReadContent(&ch, 1);
            }
            *(pointer+i) = '\0';
        }
 
        template <class type> inline void Read (type* pointer) {
            ReadContent(reinterpret_cast<char*>(pointer), sizeof(pointer));
        }
 
        template <class type> inline void Read (type* array, int length) {
            ReadContent(reinterpret_cast<char*>(array), sizeof(type)*length);
        }
 
        template <class type> inline void ReadBlock (type* pointer) {
            file >> *pointer;
        }
 
        // запись в файл:
 
        template <class type> inline void WriteContent (type* pointer, int length) {
            file.write(reinterpret_cast<char*>(pointer), length);
        }
 
        inline void WriteContent (char* pointer, int length) {
            file.write(pointer, length);
        }
 
        inline void WriteString (char* pointer) {
            int i = 0;
            while (*(pointer+i) != '\0') {
                WriteContent(pointer+i, 1);
                i++;
            }
            WriteContent(pointer+i, 1);
        }
 
        template <class type> inline void Write (type* pointer) {
            WriteContent(reinterpret_cast<char*>(pointer), sizeof(type));
        }
 
        template <class type> inline void Write (type* array, int length) {
            WriteContent(reinterpret_cast<char*>(array), sizeof(type)*length);
        }
 
        template <class type> inline void WriteAsText (type variable) {
            file << variable;
        }
 
        template <class type> inline void WriteAsText (type* pointer) {
            file << *pointer;
        }
 
        // перемещение и получение позиции указателя:
 
        inline int GetPointerPosition () {
            return file.tellp();
        }
 
        inline void SetPointerPosition (int position) {
            file.seekp(position);
        }
 
        inline void SetPointerPosition (int position, long int base) {
            file.seekp(position, std::ios_base::seekdir(base));
        }
 
        const static long int beginning = 0L;
        const static long int currentPosition = 1L << 0;
        const static long int end = 1L << 1;
 
        // проверка состояния файла:
 
        inline bool IsAllRight () {
            return file.good();
        }
};
Добавлено через 1 минуту
Скоро разобью его на 2 класса: FileForInput и FileForOutput, а после с помощью наследования заново создам этот класс.
 
Текущее время: 05:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru