
- •1.1.Указатели
- •1.1.1.Объявление указателей и работа с адресами
- •1.1.2.Адресная арифметика
- •1.1.3.Указатели как формальные параметры функции
- •1.1.4.Связь указателей и массивов
- •1.1.5.Константные указатели и указатели на константы
- •1.1.6.Связь указателей и строк
- •1.1.7.Преобразование указателей
- •1.1.8.Бестиповые указатели
- •1.1.9.Массив указателей
- •1.1.10.Указатели на указатели
- •1.1.11.Резервирование и освобождение памяти (операторы new и delete)
- •1.2.Типы данных, определяемые пользователем
- •1.2.1.Переопределяемые типы данных
- •1.2.2.Структуры
- •1.2.2.1.Массивы структур
- •1.2.2.2.Использование указателей на структуры
- •1.2.2.4.Динамические структуры и массивы структур
- •1.2.3.Классы
- •1.2.3.1.Введение в ооп
- •2.1.Потоки
- •2.2.Стандартные потоки
- •2.4.Файловые потоки
- •2.4.1.Общие принципы работы с файлами
- •2.4.2.Режимы открытия файлов
- •2.4.3.Текстовые и бинарные файлы и файловые потоки
- •2.4.4.Проверка состояния файла и потока
- •2.4.5.Функции (методы) ввода-вывода
- •2.4.5.1.Методы get и put
- •2.4.5.2.Метод getline
- •2.4.5.3.Методы read и write
- •2.4.6.Особенности работы с бинарными файлами
- •2.4.7.Использование текущей позиции файла
1.2.3.1.Введение в ооп
Применение классов лежит в основе объектно-ориентированного программирования (ООП) – программирования с использованием объектов.
Три кита ООП – инкапсуляция, наследование, полиморфизм.
Под инкапсуляцией (encapsulation) понимают объединение данных с функциями их обработки в сочетании с сокрытием ненужной для использования этих данных информации.
Наследование состоит в возможности создания иерархии классов, когда потомки наследуют все свойства своих предков, могут их изменять и добавлять новые.
Полиморфизм заключается в возможности использовать в различных классах иерархии одно имя для обозначения сходных по смыслу действий и гибко выбирать требуемое действие во время выполнения программы.
2.Язык C++: ввод-вывод
Известно, что операции ввода-вывода имеют сильную аппаратно-операционную зависимость. По этой причине в C/C++ средства ввода-вывода отделены от языка и вынесены в отдельные библиотеки. В языке C, предшественнике C++, операции ввода-вывода были реализованы с помощью набора стандартных функций библиотеки stdio. В C++ для ввода или вывода данных используется набор стандартных классов, которые объединены в объектно-ориентированной библиотеке iostream.
Поскольку C++ в основном совместим с C, в нем доступны стандартные функции ввода-вывода языка C.
В C/C++ реализован механизм ввода-вывода, не зависящий от особенностей работы разнообразных устройств, осуществляющих обмен данными с внешними носителями информации. Программа работает не с физическими, а с логическими устройствами ввода-вывода – потоками. Название это, возможно, произошло от того, что информация вводится и выводится в виде потока байтов – значение за значением. Ввод информации осуществляется из одного или нескольких входных потоков, вывод программа производит в один или несколько выходных потоков. Поток можно связать с файлом. Все устройства ввода-вывода различны, но все потоки функционируют одинаково. Одна и та же функция может выводить данные и на экран и в файл, читать данные с клавиатуры и из файла. Различия заключаются только в том, как создаются потоки и как они привязываются к нужным файлам.
2.1.Потоки
Поток – это своеобразный унифицированный интерфейс между программой и физическими устройствами, позволяющий программисту не думать об особенностях переноса данных от источника к приемнику.
Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым взаимодействует программа при передаче данных (оперативная память, файл на диске, клавиатура или принтер). Ввод данных называют извлечением из потока или чтением, вывод данных – помещением (включением) в поток или записью. Взаимодействие с потоком для увеличения скорости передачи данных производится, как правило, через специальную область оперативной памяти – буфер. Фактическая передача данных выполняется при выводе после заполнения буфера, а при вводе – если буфер исчерпан.
По направлению передачи данных потоки можно разделить на входные (данные вводятся в память), выходные (данные выводятся из памяти) и двунаправленные (допускающие как ввод, так и вывод данных).
По виду устройств, с которыми работает поток, можно разделить потоки на стандартные, файловые и строковые.
Стандартные потоки предназначены для передачи данных от клавиатуры и на экран дисплея, файловые потоки – для обмена информацией с файлами, расположенными на носителях данных (например, на дисках), а строковые потоки – для работы с массивами символов в оперативной памяти.
Для поддержки потоков библиотека C++ содержит иерархию классов, построенную на основе двух базовых классов – ios и streambuf. Класс ios содержит общие для ввода и вывода поля и методы, класс streambuf обеспечивает буферизацию потоков и их взаимодействие с физическими устройствами. От этих классов наследуется класс istream для входных потоков и ostream – для выходных. Два последних класса являются базовыми для класса iostream, реализующего двунаправленные потоки. Ниже в иерархии классов располагаются классы файловых (ifstream, ofstream, fstream) и строковых потоков.