Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/54: Рейтинг темы: голосов - 54, средняя оценка - 4.56
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320

Класс и чтение из файла

08.04.2011, 20:56. Показов 10732. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У моего задания номер 5. (оно связано с заданием 4)

4. Реализуйте класс, для которого оператор [] перегружен, чтобы
выполнять чтение символов из указанной позиции файла.
5. Реализуйте класс как в задаче 4, но пусть оператор [] индексирует
объекты произвольного типа, а не только символы.

Не могли бы Вы разъяснить задание. Причем тут класс с прегружеными [] и файл ?? Я предпологаю, что нужно массив, который получается из объекта путем перегрузки [], нужно записать в файл, а потом считать в массив и уже искать позицию для вывода. Так ли?

Правильно ли я перегрузил [] ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <class T>
class CMyClass{
    T m_arr[4];
public:
    T &operator [](int index){
        return m_arr[index];
    }
};
void main(){
    CMyClass<int> w;
 
    for(int i=0;i<3;i++)
    {
    w[i] = i;
    cout<<w[i]<<endl;
    }
    system("pause");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.04.2011, 20:56
Ответы с готовыми решениями:

С++ класс и чтение из файла
Доброго времени суток. Возник такой вот вопросец: &quot;А как переменным из класса присвоить значения, которые мы прочитаем из файла?&quot; ...

Чтение из файла в класс
Здравствуйте! Заранее прошу извинения за глупые вопросы, но приходится срочно переводить программу с C++ на C#, в котором у меня совсем...

C++ чтение из файла в класс
Файл test.txt n1 01 e1 0.1 n2 02 e2 0.2 n3 03 e3 0.3 n4 04 e4 0.4 n5 05 e5 0.5 n6 06 e6 0.6 n7 07 e7 0.7 n8 08 e8 0.8

5
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
08.04.2011, 21:10
http://www.cplusplus.com/refer... eam/seekg/
Позволяет читать с файла, начиная с заданной позиции. Успехов!
0
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
10.04.2011, 21:59  [ТС]
Есть класс с перегруженным оператором []. Вроде все правильно записывается в файл. А прочитать информацию из файла со 2-ой позиции, например, невыходит. Что не так?
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
class file_saver
{
    string data;
    ofstream *file;
public:
    file_saver(string filename, string data_):file(new ofstream(filename.c_str())), data(data_) {}
    ~file_saver()
    {
        file->close();
        delete file;
    }
    file_saver& operator[] (unsigned index)
    {
        if(index>data.length()-1)
            std::cerr<<"Out of the range"<<std::endl;
        else
            (*file)<<data[index];
        return *this;
    }
 
};
 
int main(int argc, char* argv[])
{
char text[22];
cin>>text;
    file_saver fs("D:\\my_projects\\1.txt", text);
    for(int i=0;i<strlen(text);i++)
    fs[i];
 
    string str;
    ifstream f("D:\\my_projects\\1.txt",ios::in);
    f.seekg(2);
    f>>str;
    cout<<"result:"<<endl;
    cout<<str<<endl;
f.close();
    system("pause");
    return 0;
}
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
10.04.2011, 23:22
Я бы чтение из файла накропал как-то так:
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
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
 
 
 
class chtenie {
 public:
 
 //êîíñòðóêòîðû
  chtenie () {};        
  chtenie (string);        
 
 
  //ïåðåãðóæåííûå ôóíêöèè
  char operator[](int pos) ;
 
  ~chtenie () {file.close();};        
 
 private:
  ifstream file;
  char temp; 
 
 
};
 
 
char chtenie::operator[](int pos) {
 if (!file) {
  cout<< "ôàéë íà ÷òåíèå íîðìàëüíî íå îòêðûò"<< endl;
  return 0;
 }
 else {
  file.seekg (0, ios::end);
  if (pos> file.tellg()) {
   cout<< "ñëèøêîì áîëüøàÿ ïîçèöèÿ"<< endl;
   return 0;
  }
  else {
   file.seekg (pos, ios::beg);
   file.read (&temp, 1);   
   return temp;
  }
 }
}
 
 
 
chtenie:: chtenie (string ima_faila) {
 file.open (ima_faila.c_str(), ios::binary|ios::in);
}
 
 
int main () {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 chtenie _chtenie ("ra.cpp");
 cout<< _chtenie[23]<< endl;
 getchar ();
 
 return 0;
}
1
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
10.04.2011, 23:58  [ТС]
Ну вот у меня кое-что похожее...
В моем примере у меня сделано так: я могу закидывать в файл символ, стоящий на конкретной позицци и ,соответственно, считываю его. (т.е. если есть строка "12345" я могу, написав obj[2], закинуть в файл тройку и соответсвенно считать ее.

Как можно подкорректировать под задание? (т.е. если есть строка "12345", указав позицию ,например, 2 мне выдалось 345) ?

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
template <class T>
class base
{
private:
    ofstream *file;
    T *str;
    int size;
public:
         base(string filename, T *str1)
         {
             file= new ofstream(filename.c_str());
 
        size = strlen(str1);
        str = new T[size+1];
        strcpy(str,str1);
    }
    ~base()
    {
        file->close();
        delete []str;
    }
    base& operator [](unsigned index)
    {
        
        (*file)<<str[index]<<endl;
        return *this;
    }
};
 
void main()
{
    base<char> obj("D:\\my_projects\\1.txt","12345");
 
    obj[2];
 
    ifstream f;
    char *p = new char[100];
    f.open("D:\\my_projects\\1.txt");
    if(f.fail()==1) cout<<" File not open"<<endl;
    else
    {
        f.getline(p,99);
        cout<<p<<endl;
    }
    f.close();
    delete []p;
    system("pause");
 
}
0
6 / 6 / 0
Регистрация: 06.03.2012
Сообщений: 82
01.05.2012, 19:55
Немного старо, если кто наткнётся привожу код: весь ввод проверяется на правильность, всё разделено по функциям, без шаблонов.

MAIN.CPP

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
#include "in.h"
#include <iostream>
using namespace std;
void main()
{   
    while(true)
    {
        int n = 0;
        Reader read;
        int flag = 0;
        do
        {
            try
            {
                flag = 0;
                cout << "Begin?" << "\n 0 - yes; 1 - no : ";
                n = read.check_int();
            }catch(int)
            {
                flag = 1;
                cout << "Enter 1 or 0! ";
            }
        }while(flag == 1);
        if (n == 1)
        {
                break;
        }else 
        {
            if( n != 0)
            {
                cout << "Enter 1 or 0! " << endl;
            }
        } // тут либо получили разрешение на продолжение, либо вышли
        read.name_file();
        int index;
        do
        {
            try
            {
                flag = 0;
                cout << "Enter [index]: ";
                index = read.check_int();
            }catch(int)
            {
                flag = 1;
                cout << "Error! Enter int!" << endl;
            }
        }while(flag == 1);
        //cout << index;
        cout << read[index];
        read.file_close();
    } // цикл while
}
FUNC.CPP - описание функций

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
#include "in.h"
#include <iostream>
#include <string>
using namespace std;
int Reader :: check_int()
{
    int i;
    char ch[10];
    int flag = 0;
    cin >> i;
    flag = cin.rdstate(); // чтение потока
    if (flag& ios :: failbit)
    {
        cin.clear();
        cin >> ch;
        throw 1;
    }
    return i;
}
char Reader :: operator[](int n)
{   
    in.seekg(0, ios :: end);
    if (n > in.tellg())
    {
        cout << "Index NOT found" << endl;
        return 0;
    }else
    {
        in.seekg(n, ios ::beg);
        in.read(&tmp , 1);
        cout << tmp << endl;
    }
    return tmp;
}
void Reader :: name_file()
{
    string file_name;
    cout << "Enter name of FILE: ";
    cin >> file_name;
    in.open(file_name, ios :: in);// | ios :: binary);
    if(in.is_open())
    {
        cout << "File OPEN" << endl;
    }else 
    {
        cout << "File NOT OPEN" << endl;
    }
}
void Reader :: file_close()
{
    in.close();
}
IN.H - объявления

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <fstream>
#include <iostream>
using namespace std;
class Reader
{
    public:
        char operator [](int n);
        void name_file();
        int check_int();
        void file_close();
private:
    ifstream in;
    char tmp;
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.05.2012, 19:55
Помогаю со студенческими работами здесь

Чтение из файла через класс
Здравствуйте! У меня нубский вопрос... Имеется класс формы (Form1) с обработчиком события button1_Click public partial class...

Класс. Строка. Чтение из файла.
Добрый день. Возникла проблемка. #include &lt;iostream&gt; using namespace std; class zdanie { int plosh, obm; char *adres,...

Класс работы с массивами и чтение из файла
Нужна помощь в решении задачи : Заданы 2 бинарных файла со следующей структурой: N - число эл-тов одномерного целочисленного...

Чтение файла в класс с его предварительным поиском
Суть проблемы: У меня есть целая куча файлов. В этих файлах лежат данные типо, имя, фамилия и так далее в столбец Примерно вот так: ...

Чтение и запись файла используя класс QFile
Всем доброго здравия! Пытаюсь работать с устройством /dev/usbtmc1 (linux xubuntu), которое принимает текстовые команды и отвечает на...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru