- •3. Указатели и ссылки. Указатель this.
- •4. Использование операторов new и delete.
- •5. Понятие классов и экземпляров классов.
- •6. Описание классов(class, struct, union).
- •7. Вложенные классы.
- •8. Определение объектов при помощи классов.
- •9. Конструкторы и деструкторы классов.
- •10. Атрибуты доступа к компонентам классов.
- •12. Вызов членов класса.
- •11. Объявление и определение методов класса.
- •13. Перегрузка конструкторов. Конструкторы копий.
- •14. Перегрузка операторов отношения.
- •15. Перегрузка логических операторов.
- •16. Перегрузка унарных операторов.
- •17. Перегрузка бинарных операторов.
- •18. Функция оператор как член класса и как friend функция.
- •19. Дружественные функции.
- •20. Доступ к компонентам классов в зависимости от атрибутов доступа.
- •21. Введение в наследование. Базовые классы.
- •22. Производные классы.
- •23. Ограничение доступа к элементам класса. Наследование свойств и модификаторы доступа. Одиночное наследование. Доступ к компонентам производных и базовых классов.
- •24. Конструкторы базовых и производных классов.
- •25. Виртуальные базовые классы. Чисто виртуальные функции.
- •26. Использование указателей на базовые классы и производные классы. Виртуальные методы.
- •27. Потоки ввода-вывода.
- •28. Иерархия классов ввода-вывода. Основные уровни иерархии. Классы потоков.
- •29. Стандартные классы, объекты и механизмы консольного ввода/вывода.
- •30. Стандартные классы, объекты и механизмы файлового ввода/вывода.
- •31. Понятие манипулятора. Реализация пользовательских манипуляторов.
- •32. Файлы последовательного доступа и произвольного доступа.
- •33. Понятие шаблона. Шаблоны функций и классов.
31. Понятие манипулятора. Реализация пользовательских манипуляторов.
Чтобы избавить программиста от необходимости иметь дело с состоянием потока посредством флагов, стандартная библиотека предоставляет набор функций дял манипулирования этим состоянием. Ключевая идея заключается в том чтобы вставлять между объектами операцию, которая изменила бы состояние потока. Программист может добавлять собственные манипуляторы написанные в том же стиле что и стандартные.
Например:
#include <iostream.h>
#include <iomanip.h>
ostream& left10(ostream &stream)
{
stream.setf(ios::left);
stream<<setw(10);
return stream;
}
int main()
{
cout << 12 << left10 << 15 << 17 <<endl;
return 0; }
}
32. Файлы последовательного доступа и произвольного доступа.
Произвольный доступ означает, что вы можете перейти непосредственно к определенному месту файла для чтения или внесения изменений в данные, расположенные именно в этом месте. Перемещение указателя файла в заданную позицию выполняет функция fseek(). Если за ней следует, например, функция fread(), то она будет читать данные, начиная с позиции, отмеченной файловым указателем. Кроме того, функция ftell() сообщает текущее положение указателя, а функция rewind() переносит указатель в начало файла.
Последовательный доступ означает, что чтение файла осуществляется сначала.
33. Понятие шаблона. Шаблоны функций и классов.
Шаблоны обеспечивают непосредственную поддержку обобщенного программирования, то есть программирования с использованием типов в качестве параметров. Механизм шаблонов в С++ допускает использование типа в качестве параметра при определении класса или функции. Шаблон зависит только от тех свойств параметра-типа, которые он явно использует, и не требует, чтобы различные типы, используемые в качетсве аргументов, были связаны каким-либо другим образом.
Для большинства людей наиболее очевидным применением шаблонов является определение и использование классов-контейнеров, таких как basic_string , vector, map. Сразу же возникает потребность в шаблонах функций Шаблоны функций имеют большое значение при написании обобщенных алгоритмов , применимых к широкому спектру контейнеров. Существенным моментом является возможность выведения типа аргументов шаблона функции по типам аргументов при ее вызове. Создание производного шаблона класса от класса , не являющегося шаблоном , явялется способом обеспечения общей реализации для набора шаблонов. Часто бывает полезно создавать шаблоны производные от другого шаблона. Базовый класс в этом случае является строительным блоком для реализации дальнейших классов. Если данные или операции в базовом классе зависят от параметров шаблона производного класса, сам базовый класс далжен быть параметризован.
34. Основы обработки исключений в С++. Генерация исключений.
Фундаментальная идея исклчюения состоит в том что функция обнаружившая проблему, но не знающая как ее решить, генерирует исклчюение в надежде, что вызвавшая ее функция сможет решить возникщую проблему. Механизм исключений предназначен для обработки только синхронных исключений, таких как выход за пределы диапазона в массиве ошибок ввода/вывода. Механизмы обработки исключения С++ предназначены для генерации сообщения об ошибке и обработки ошибок и исключительных событий.
Перехватив исключение , обработчик часто решает, что он может полностью обработать ошибку. В этом случае обработчик делает то что может, после чего вновь генерирует исключение. Таким образом, обишка может быть обработана в наиболее подходящем месте. Это происходит даже в том случае,когда информация, требуемая для корректной обработки ошибки,не сосредоточена в каком-то одном месте, атк что действия по восстановлению лучше распределить по нескольким обработчикам.
Рассмотрим тривиальный пример обработки исключительных ситуаций.
Есть функция div(), возвращающая частное от деления чисел, принимаемых в качестве аргументов, если делитель равен нулю, то генерируется исключительная ситуация.
#include<iostream.h>
double div(double dividend, double divisor)
{
if(divisor==0)
throw 1;
return dividend/divisor;
}
void main()
{
double result;
try{
result=div(77.,0.);
cout<<"Answer is "<<result<<endl;
}
catch(int){
cout<<"Division by zero"<<endl;
}
}
