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

ifstream: как работают операторы << и >>? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ аналог класса map http://www.cyberforum.ru/cpp-beginners/thread1081564.html
есть ли у кого-нибудь примеры?или намеки с чего начать?
C++ Написать программу используя функции Используя имя массива как указатель, и применяя адресную арифметику выполнить задание: 17. Дан одномерный массив, состоящий из N целочисленных элементов. 17.1. Ввести массив с клавиатуры. 17.2. Найти максимальный отрицательный элемент. 17.3. Вычислить среднеарифметическое четных элементов массива. 17.4. Вывести ненулевые элементы на экран в обратном порядке. http://www.cyberforum.ru/cpp-beginners/thread1081554.html
C++ Посоветуйте литературу
Скачал несколько книг по C++, в самом начале книги написаны темы, которые обычно изучают не на первой странице, а в середине книге. Дайте название литературы, где по порядку все идет и понятно написано ( например сначала переменные, потом условные if else, потом циклы и т.д, а не переменные потом указатели, классы и т.д)
C++ Просто исправте ошибку
//---------------------------------------------------------------------------- #include <stdio.h> #include <conio.h> #include <iostream.h> #include <cmath.h> #include <vcl.h> #define SZ 5 //----------------------------------------------------------------------------
C++ найти подмассив 3х3 с макс. суммой и транспонировать его в исходном массиве http://www.cyberforum.ru/cpp-beginners/thread1081527.html
добрый вечер. помогите, пожалуйста решить задачку: Задан двумерный массив NxM. Нужно написать код, который в исходном массиве найдет подмассив размером 3х3 с максимальной суммой элементов и транспонирует его в исходном массиве.N и M могут быть не кратны 3..( Σ1=30, Σ2=47, Σ3=41, Σ4=58 Исходная матрица:{1, 3, -2, 11}, {7, 10, 2, 6}, {1,...
C++ Возможно ли установить С++ 6.0 на windows 8 ? Возможно ли установить С++ 6.0 на windows 8 ? подробнее

Показать сообщение отдельно
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
26.01.2014, 18:34     ifstream: как работают операторы << и >>?
Цитата Сообщение от WebSofter Посмотреть сообщение
Объясните, пожалуйста, языком "ребенка", как они работают? Не доходит!
По аналогии(для простоты обработчики ошибок и т.д., опущены)
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
#include <cstdio>
#include <iostream>
 
class Ifstream {
private:
  std::FILE* fp;
  bool eof;
  
public:
  Ifstream(const char* filename)
  : fp(std::fopen(filename, "r")), eof(false) {
    
  }
  
  ~Ifstream() {
    std::fclose(fp);
  }    
  
  operator bool() {
    return !eof; 
  }
  
  friend Ifstream& operator>>(Ifstream& stream, int& value) {
    std::fscanf(stream.fp, "%d", &value);    
    stream.eof = std::feof(stream.fp);    
    return stream;
  }
};
 
int main() {
  int value;
  Ifstream stream("input.txt");
    
  while(stream >> value) // while(operator>>(stream, value))
    std::cout << value << std::endl;
}
Выражение stream >> value это тоже, что и operator>>(stream, value), т.е. вызов специальной функции operator>>(23 строка). В данном случае эта функция читает очередное число из файла с помощью std::fscanf, и определяет не был ли достигнут конец файла. При достижении конца файла stream.eof примет значение true.
Когда stream >> value передаётся в while, которому необходимо логическое выражение, произойдёт попытка преобразования значения возвращаемого stream >> value(т.е., Ifstream&) в тип bool
C++
1
while(static_cast<bool>(stream >> value))
в этот момент будет вызвана специальная функция operator bool()(19 строка), которая собственно и вернёт логическое выражение !eof. Когда eof после очередного чтения примет значение true, цикл завершится. Приблизительно по тому же принципу работает и ifstream.
 
Текущее время: 15:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru