Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы
Скачать 1.76 Mb.
|
Потоковые классыПо направлению обмена потоки можно разделить на:
выходные (данные выводятся из памяти); двунаправленные (допускающие как извлечение, так и включение). По виду устройств, с которыми идёт работа, потоки делят на стандартные, файловые и строковые. стандартные потоки предназначены для передачи данных от клавиатуры и на экран; файловые потоки — для обмена информацией с файлами на внешних носителях данных (например, на магнитном диске); строковые потоки — для работы с массивами символов в оперативной памяти. Потоковые классыСтандартные потоки Для поддержки потоков библиотека C++ содержит иерархию классов, построенную на основе двух базовых классов – ios и streambuf.
класс 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 он найдет прототип метода 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(), которая возвращает последовательность символов вместе с разделителями. |