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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 304
08.04.2011, 20:56     Класс и чтение из файла #1
У моего задания номер 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++ C++ / чтение из файла
C++ чтение из файла
Класс. Строка. Чтение из файла. C++
C++ чтение из файла в класс C++
C++ Чтение из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Сообщений: 304
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
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
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
Сообщений: 304
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     Класс и чтение из файла
Ответ Создать тему
Опции темы

Текущее время: 21:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru