Главная страница
Навигация по странице:

  • Потоковые классы

  • Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы


    Скачать 1.76 Mb.
    НазваниеОбъекты и классы
    АнкорКурс ООП в С презентация
    Дата21.02.2022
    Размер1.76 Mb.
    Формат файлаppt
    Имя файлаООП в с++(полный курс).ppt
    ТипДокументы
    #368655
    страница17 из 26
    1   ...   13   14   15   16   17   18   19   20   ...   26

    Потоковые классы


    По направлению обмена потоки можно разделить на:
      входные (данные вводятся в память);
      выходные (данные выводятся из памяти);
      двунаправленные (допускающие как извлечение, так и включение).

      По виду устройств, с которыми идёт работа, потоки делят на стандартные, файловые и строковые.

      стандартные потоки предназначены для передачи данных от клавиатуры и на экран;
      файловые потокидля обмена информацией с файлами на внешних носителях данных (например, на магнитном диске);
      строковые потоки — для работы с массивами символов в оперативной памяти.

    Потоковые классы


    Стандартные потоки
    Для поддержки потоков библиотека C++ содержит иерархию классов, построенную на основе двух базовых классов – ios и streambuf.
      класс ios содержит общие для ввода и вывода поля и методы;
      класс streambuf обеспечивает буферизацию потоков и их взаимодействие с физическими устройствами.

      Между этими классами существует связь: в классе ios есть поле bp, которое является указателем на streambuf.
      Стандартному потоку ввода соответствует класс istream, стандартному потоку вывода – класс ostream. Эти классы являются производными от класса ios.
      Класс iostream является наследником классов istream и ostream, это класс двунаправленных потоков, он обеспечивает общие средства потокового ввода/вывода. В библиотеке iostream автоматически доступны объекты: cin, соответствующий стандартному потоку ввода, и cout для потока вывода. Оба эти потока являются буферизированными.

    Потоковые классы


    ostream определяет оператор << ("записать в") для управления выводом встроенных типов. Класс istream обеспечивает оператор ввода >> ("прочесть из") для небольшого набора стандартных типов.
    Означенные операторы может быть переопределены разработчиком для других вводимых типов.
    Эти функции должны возвращать ссылку на экземпляры классов потоков для того, чтобы к ней можно было применить другой operator<<() или operator>>() в зависимости от используемого потока.
    Оператор >> пропускает символы-разделители (пробел, табуляция, новая строка, новая страница и возврат каретки).

    Потоковые классы


    ios


    istream


    fstreambase


    ostream


    ifstream


    ofstream


    iostream


    fstream


    иерархия потоковых классов

    Потоковые классы


    Если компилятор встретит в программе операторы:
    int x = 5;
    cout< он определит, что левый операнд имеет тип ostream, а правый – int.
    В заголовочном файле ostream он найдет прототип метода ostream& operator<<(int) и вызовет метод cout.operator<<(x), где х имеет тип int.
    В результате работы этого метода на экране будет выведено число 5.
    В случае вывода на экран значений встроенных типов (int, float, double и др.) класс ostream обеспечивает их преобразование из внутреннего двоичного формата к изображению в виде строки символов. При этом выполняется форматирование, которое установлено по умолчанию полями базового класса ios.
    Аналогично работает поток cin.

    Потоковые классы


    Чаще всего нам приходится иметь дело с получением текстовой информации.
    Простейший объект диалога можно представить посредством класса (edit), у которого есть поле с заголовком (name) для ввода строки, отображаемое в некоторых координатах (start_x и start_y).
    Свойства элемента задаются конструктором с параметрами, а его отображение на экране и последующее получение строки обеспечивается методом show().
    class edit
    {
    int start_x, start_y;
    string name;
    public:
    edit(int, int, string);
    string show();
    };
    edit::edit(int sx, int sy, string n)
    {
    start_x = sx;
    start_y = sy;
    name = n;
    }

    Потоковые классы


    Реализация метода show() требует определения дескриптора устройства вывода (hStdout), представленного текстовой консолью. Так же мы используем и функцию SetConsoleCursorPosition() для перемещения курсора в экранные координаты, определяемые структурой типа COORD.
    Эти механизмы относятся к библиотеке "windows.h".
    string edit::show()
    {
    HANDLE = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD c; c.X = start_x; c.Y = start_y;
    SetConsoleCursorPosition(hStdout, c);
    cout << name; c.Y++; string s;
    SetConsoleCursorPosition(hStdout, c);
    getline(cin, s);
    return s;
    }
    Для получения строки s из потока ввода cin мы задействуем функцию getline(), которая возвращает последовательность символов вместе с разделителями.

    1   ...   13   14   15   16   17   18   19   20   ...   26


    написать администратору сайта