- •Технологии программирования Структурное и объектно-ориентированное программирование
- •Классы и потоки ввода-вывода
- •Стандартный ввод-вывод
- •Ввод для встроенных типов
- •Вывод для встроенных типов
- •Управление вводом-выводом
- •Классы, инкапсуляция, объекты
- •Управление доступом к элементам класса
- •Определение методов класса
- •Вызов метода и доступ к элементам класса
- •Список элементов класса
- •Конструкторы и деструкторы
- •Инициализация конструкторов класса
- •Полиморфизм. Перегрузка функций
- •Перегрузка конструкторов
- •Функция с параметрами по умолчанию
- •Конструктор по умолчанию
- •Конструктор копирования
- •Обобщение перегрузки конструкторов и инициализации объектов
- •Полиморфизм. Перегрузка операций
- •Динамическое выделение памяти
- •Динамическое выделение памяти в конструкторе
- •Копирование динамических объектов
- •Наследование и контроль доступа Базовые и производные классы
- •Использование конструкторов с параметрами при наследовании
- •Множественное наследование
- •Полиморфизм. Виртуальные функции
Классы и потоки ввода-вывода
Ввод-вывод в С++, также как и в С, рассматривается как поток данных, управляемый с помощью функций ввода-вывода. В С++ для поддержки ввода-вывода данных используется целая иерархия классов.
Основополагающим базовым классом является класс ios. Производными от него являются классы istream – поддерживает базовые операции ввода, ostream – поддерживает базовые операции вывода. Двунаправленный поток поддерживается классом iostream, производным от istream и ostream, что можно представить схемой:
ios
____________|_________
| |
istream ostream
|_____________________|
|
iostream
Объявления этих классов ввода-вывода помещено в заголовочный файл, который нужно подключить к программе строкой:
#include<iostream.h>
Начав с определения потока как абстракции для моделирования прохождения потока данных от источника к приемнику, класс iostream обеспечивает иерархию классов для управления буферированным и непосредственным вводом-выводом для устройств и файлов. Пользователь может создавать собственные классы ввода-вывода на базе стандартных классов.
Стандартный ввод-вывод
С++ поддерживает четыре предопределенных потоковых объекта:
cin – стандартный ввод, как правило с клавиатуры, аналог stdin в С (объект класса istream).
cout – стандартный вывод, как правило на экран, аналог stdout в C (объект класса ostream).
cerr – стандартный небуферизованный вывод ошибок, как правило на экран, аналог stderr в С (объект класса ostream).
clog – буферизованный вывод ошибок, нет аналога в С (объект класса ostream).
Можно переназначать стандартные потоки на другие устройства и файлы.
Для каждого потока "перегружены" (переопределены) два оператора:
>> – оператор извлечения (чтения) из потока (для ввода с клавиатуры: "считать из");
<< – оператор записи (вставки) в поток (для вывода на экран: "вывести на").
Замещающие функции способны воспринимать аргументы любых основных типов данных (char, char*(string), int, long, float, double) и могут быть расширены для того, чтобы воспринимать аргументы типа class.
Ввод для встроенных типов
Файл заголовков iostream.h содержит объявление объекта вида:
istream cin;
Класс iostream определяет оператор ввода >> для набора стандартных типов:
class istream
{ // …
public: // общедоступные функции
istream & operator >> (char&); // символ
istream & operator >> (char*); // символьная строка
istream & operator >> (short&); // короткий целый
istream & operator >> (int&); // целый
istream & operator >> (long&); // длинный целый
istream & operator >> (float&); // действительный
istream & operator >> (double&); // двойной действительный
}
Операция >> (извлечения, чтения) заменяет функцию ввода scanf() и лучше защищает от ошибок. Левый операнд – это объект типа класса istream. Правый операнд может быть любого типа, для которого определен ввод потока. По умолчанию оператор >> опускает пробельные символы, а затем считывает символы, соответствующие типу вводимого данного. Функции преобразования и форматирования данных зависят от их типов.
Для ввода-вывода можно строить цепочки операций слева направо. Например, так можно ввести несколько данных в С++:
int i; float f;
cin >> I >> f;
Для всех числовых типов в случае, когда первый непробельный символ не является цифрой, или знаком, или точкой (для вещественных чисел) поток входит в состояние ошибки и вплоть до сброса состояния ошибки любой дальнейший ввод запрещен.
Для целых типов short, int, long действие операции >> по умолчанию заключается в пропуске пробельных символов и преобразовании целого значения путем чтения символов ввода до символа, который не является допустимым для данного типа.
Для типов с плавающей точкой float и double действие операции >> состоит в пропуске пробельных символов и преобразовании значения с плавающей точкой до символа, который не может быть частью числа с плавающей точкой.
