
- •1. Понятие объектно-ориентированного программирования
- •2.Основные принципы ооп. Инкапсуляция
- •4. Конструкторы
- •Конструктор без параметров
- •Конструктор копирования
- •Деструкторы
- •Массивы объектов
- •Виртуальные методы
- •Использование классов функциональных объектов для настройки шаблонных классов
- •2. Стандартные потоки
- •3. Форматирование при вводе/выводе
- •4. Методы обмена с потоками
- •5. Ошибки потоков
- •6. Файловые потоки
- •7. Потоки и типы определяемые пользователем
- •Стандартная библиотека шаблонов stl (4 часа)
- •2. Контейнеры
- •3. Итераторы
Использование классов функциональных объектов для настройки шаблонных классов
Функциональным объектом называется объект, для которого перегружена операция вызова функции operator(). Класс, экземпляром которого является этот объект, называется функциональным классом. В таком классе не нужны другие поля и методы.
Пример.
struct LessThan
{
bool operator()(const int x, const int y)
{
return x<y;
}
};
Использование такого класса имеет специфический синтаксис:
int main()
{
LessThan x;
int a=5,b=10;
if( x(a,b)) cout<<a<<”<”<<b;
}
Здесь х – это объект функционального класса. Можно записать функциональный объект по-другому:
if LessThan()(a,b) cout<<a<<”<”<<b;
Пример: Написать шаблонный класс для выбора одного из двух значений, хранящихся в этом классе. Критерий выбора передается как параметр шаблона.
template <class T>
struct LessThan
{
bool operator()(const T&x,const T&y)
{
return x<y;
}
};
struct GreaterThan
{
bool operator()(const T&x,const T&y)
{
return x>y;
}
};
template <class T, class Compare>
class PairSelect
{
T a, b;
public:
PairSelect(const T &x, const T & y):a(x),b(y){}//конструктор
void Show()const
{
if(Compare()(a,b)) cout<<a; else cout<<b;
}
};
void main()
{
PairSelect<int,LessThan<int>>p1(15,10);
p1.Show();//вывод 10
PairSelect<double,GreaterThan<double>>p2(15.5,10.1);
p2.Show();//вывод 15.5
}
Потоковые классы С++ ( 4 часа).рование при вводе-выводе. Манипуляторы. Ввод - вывод объектов пользовательских классов. Состояние потока. Неформатированный ввод-вывод. Классы istream и ostream. Файловый ввод-вывод. Классы ofstream, ifstream, fstream. Обработка ошибок потока -->
Понятие потока
Поток — это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику.
Чтение данных из потока называется извлечением, вывод в поток — помещением, или включением.
Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен (оперативная память, файл на диске, клавиатура или принтер). Обмен с потоком для увеличения скорости передачи данных производится, как правило, через специальную область оперативной памяти — буфер. Буфер накапливает байты, и фактическая передача данных выполняется после заполнения буфера. При вводе это дает возможность исправить ошибки, если данные из буфера еще не отправлены в программу.
С++ предоставляет возможность ввода/вывода как на низком уровне – неформатированный ввод-вывод, так и на высоком – форматированный ввод-вывод. При неформатированном вводе/выводе передача информации осуществляется блоками байтов данных без какого-либо преобразования. При форматированном - байты группируются таким образом, чтобы их можно было воспринимать как типизированные данные (целые числа, строки символов, числа с плавающей запятой и т. п.)
Рисунок 9 Потоки ввода вывода
По направлению обмена потоки можно разделить на входные (данные вводятся в память), выходные (данные выводятся из памяти) и двунаправленные (допускающие как извлечение, так и включение).
По виду устройств, с которыми работает поток, потоки можно разделить на стандартные, файловые и строковые.
Стандартные потоки предназначены для передачи данных от клавиатуры и на экран дисплея, файловые потоки — для обмена информацией с файлами на внешних носителях данных (например, на магнитном диске), а строковые потоки — для работы с массивами символов в оперативной памяти.