Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как перегрузить myifstream::operator>>(char* &s)  (Прочитано 8765 раз)
0 Пользователей и 1 Гость смотрят эту тему.
yours-tester
Гость
« : 23-09-2005 09:46 » new

Изучаю C++. Объектный ввод вывод. Перегрузил operator>> для int, а вот вводить из файла строки char или string никак не получается пока. Может кто подскажет?

myfstream.h
Код:
#ifndef __MYFSTREAM_H
#define __MYFSTREAM_H
#include <fstream>
#include <iostream>
#include <string>
using namespace std;

class myifstream: public ifstream
{
public:
unsigned int error_num;
myifstream():error_num(0){}
void open(const char* , int nMode=ios::in);
myifstream& operator>>(int& s);

};

void myifstream::open(const char* szName, int nMode)
{
if ((nMode <1)||(nMode>63))
{
cerr << " Error " << error_num << ". Wrong access mode to the file " << szName << endl;
exit(error_num);
}

ifstream::open(szName, nMode);
if (fail())
{
cout << "Error " << error_num << " of openning file " << szName << " with access mode " << nMode << endl;
exit (error_num);
}
error_num=0;
return;

}

myifstream& myifstream::operator>>(int& s)
{

if(!ifstream::operator>>(s))
{
cerr << "Error " << error_num << ". Input error of type of int." << endl;
exit(error_num);
}
return *this;
}


#endif

pristavki.cpp
Код:
#include "myfstream.h"
#include <string>
#include <iostream>

using namespace std;

int main(void)
{
int str;
myifstream IFile;
IFile.error_num=10;
IFile.open("D:\\temp\\IFile.txt");
IFile.error_num=11;
IFile >>str;
cout << str << endl;
return 0;
}

Записан
LP
Помогающий

ru
Offline Offline

« Ответ #1 : 25-09-2005 10:59 » 

Зачем тебе эти велосипеды? Операторы >> для int, char* и string уже определены, пользуйся ими. Тем более что в примере для int ты просто используешь уже готовый опрератор ввода для int...
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
yours-tester
Гость
« Ответ #2 : 26-09-2005 07:47 » 

Собственно надо это именно потому, чтобы выяснить как это всё работает, и почему нет метода для char *. Процесс изучения так сказать. Да и потом разве не удобство скрыть все проверки корректности ввода вывода в отдельном классе и сделать операторы ввода/вывода немногословными?
Записан
LP
Помогающий

ru
Offline Offline

« Ответ #3 : 26-09-2005 16:17 » 

Цитата
Собственно надо это именно потому, чтобы выяснить как это всё работает, и почему нет метода для char *.
Как нету? Есть ведь.
Цитата
Да и потом разве не удобство скрыть все проверки корректности ввода вывода в отдельном классе и сделать операторы ввода/вывода немногословными?
Может быть удобно... но ИМХО наследоваться от ifstream - это из пушки по воробьям. Если ты хочешь отделить
обработку ошибок от основного кода, то, например, можно настроить поток так, чтобы он кидал исключения в случае ошибки ввода (функцией exceptions) или просто все это делать в отдельной функции input_int(). Хотя дело вкуса, может быть.
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines