Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перегрузка [] 
:(
    Опции темы
zhenya1
Дата 11.4.2011, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 20.9.2010

Репутация: нет
Всего: нет



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

В моем примере у меня сделано так: я могу закидывать в файл символ, стоящий на конкретной позицци и ,соответственно, считываю его. (т.е. если есть строка "12345" я могу, написав obj[2], закинуть в файл тройку и соответсвенно считать ее.

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

Код

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");
}
 

PM MAIL   Вверх
borisbn
Дата 11.4.2011, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



zhenya1, это учебное задание ? Если нет, то довольно сложно представить себе нормальное использование такого класса.
Если же учебное, то лучше приведи само задание (исходное), и сформулируй почётче вопрос.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
zhenya1
Дата 11.4.2011, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 20.9.2010

Репутация: нет
Всего: нет



Вот дословно:

У моего задания номер 5. (оно связано с заданием 4)

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

Я ,вроде, понял как можно закидывать в файл с указанной позиции, но почему я не могу взять и считать данные? Выводится пустая строчка.

Код

class base
{
...
... // тоже самое, как и в предыдущем моем сообщении
...

    base& operator [](unsigned index)
    {
        int k=index;
        while(k!=5){
            (*file)<<str[index];k++;index++;}

        return *this;
    }
};

void main()
{
    base obj("D:\\my_projects\\1.txt","12345");

    obj[2];
    ifstream infile("D:\\my_projects\\1.txt",ios::in);
    string s;
    infile>>s;
    cout<<s<<endl;
    infile.close();
    system("pause");

}


PM MAIL   Вверх
xvr
Дата 11.4.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(zhenya1 @  11.4.2011,  00:56 Найти цитируемый пост)
Мне нужен класс, для которого оператор [] перегружен, чтобы 
выполнять чтение символов из указанной позиции файла. 

Смотрим у вас:

Цитата(zhenya1 @  11.4.2011,  00:56 Найти цитируемый пост)
 
Код

   base& operator [](unsigned index)
    {
        (*file)<<str[index]<<endl;
        return *this;
    }


Для справки - '<<' - это запись в файл, а не чтение
И ваш operator[] должен возвращать не base&, а T (параметр шаблона)

Соответственно file должен быть не ofstream, а basic_ofstream<T> (и ему совершенно не обязательно быть указателем, он вполне может быть прямо членом класса)


PM MAIL   Вверх
borisbn
Дата 11.4.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(zhenya1 @  11.4.2011,  01:46 Найти цитируемый пост)
оператор [] перегружен, чтобы выполнять чтение символов из указанной позиции файла.


Цитата(xvr @  11.4.2011,  13:28 Найти цитируемый пост)
Соответственно file должен быть не ofstream, а basic_ofstream<T>


наверное, всё-таки, не ofstream и не basic_ofstream, а basic_ifstream.
Цитата(xvr @  11.4.2011,  13:28 Найти цитируемый пост)
и ему совершенно не обязательно быть указателем, он вполне может быть прямо членом класса

согласен. Тем более, что ты его создаёшь (new), но не удаляешь (delete).


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.