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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
#1

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

08.04.2011, 20:56. Просмотров 3257. Ответов 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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2011, 20:56     Класс и чтение из файла
Посмотрите здесь:

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

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

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

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

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

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

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

Чтение файла с несколькими знаками конца файла - C++
В файле несколько раз встречается ноль, и ни как не получается прочитать его полностью. Как можно решить данную проблему ?

Чтение из файла - C++
Помогите дописать код чтения из файла. За ранее спасибо. void MyList::save() { Sotrydnik sSotrydnik; ofstream F; ...

Чтение из файла С++ - C++
Прочитать из txt файла данные, так чтобы пропустить первые 16 и и вывести на экран 3 столбца: Latitude, longitude, depth и затем сохранить...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
prazuber
108 / 108 / 3
Регистрация: 29.04.2010
Сообщений: 240
08.04.2011, 21:10     Класс и чтение из файла #2
http://www.cplusplus.com/reference/i...istream/seekg/
Позволяет читать с файла, начиная с заданной позиции. Успехов!
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
10.04.2011, 21:59  [ТС]     Класс и чтение из файла #3
Есть класс с перегруженным оператором []. Вроде все правильно записывается в файл. А прочитать информацию из файла со 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;
}
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,419
10.04.2011, 23:22     Класс и чтение из файла #4
Я бы чтение из файла накропал как-то так:
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;
}
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
10.04.2011, 23:58  [ТС]     Класс и чтение из файла #5
Ну вот у меня кое-что похожее...
В моем примере у меня сделано так: я могу закидывать в файл символ, стоящий на конкретной позицци и ,соответственно, считываю его. (т.е. если есть строка "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");
 
}
muskos
6 / 6 / 0
Регистрация: 06.03.2012
Сообщений: 82
01.05.2012, 19:55     Класс и чтение из файла #6
Немного старо, если кто наткнётся привожу код: весь ввод проверяется на правильность, всё разделено по функциям, без шаблонов.

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;
};
Yandex
Объявления
01.05.2012, 19:55     Класс и чтение из файла
Ответ Создать тему
Опции темы

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