- •1. Комментарии
- •2. Константы
- •3. Встраиваемые функции Встраиваемые функции
- •4. Объявление структур, объединений и перечислений
- •5. Объявление переменных
- •5. Ссылки Что такое ссылка и что с ней можно делать
- •Ссылку можно рассматривать как еще одно имя объекта. В основном ссылки используются для задания параметров и возвращаемых функциями значений, а также для перегрузки операций.
- •6. Использование спецификатора void
- •7. Преобразование стандартных типов данных.
- •8. Новые операции new, delete, операция расширения области видимости
- •1. Операция new
- •2. Операция delete
- •3. Операция :: области видимости
- •9. Объявление функций. Аргументы по умолчанию
- •10. Перегрузка функций
- •Когда использовать перегрузку
- •Новые возможности по сравнению с Си
- •Объектно-ориентированные особенности языка
- •Две роли классов
- •Поля класса
- •Конструкторы класса
- •13. Перегрузка операций
- •Перегрузка операций
- •Перегрузка унарных операций
- •Перегрузка бинарных операций
- •Перегрузка операции присваивания
- •Перегрузка операции приведения типа
- •14. Дружественные функции
- •15. Сходства и различия классов, структур и объединений.
- •Отличия структур и объединений от классов
- •16. Классы и объекты. Определение класса и области видимости. Опережающее объявление класса
- •Две роли классов
- •Поля класса
- •17. Использование спецификатора класса памяти static. Статические компоненты класса
- •18. Константные объекты и константные методы
- •19. Неявный указатель this
- •20. Указатели на член класса
- •21. Локальные и вложенные классы
- •22. Специальный вид методов класса - конструкторы и деструкторы. Некоторые особенности конструкторов и деструкторов Конструкторы класса
- •23. Классы, содержащие объекты других классов
- •24. Создание объектов с различным временем жизни
- •25. Массивы объектов класса
- •26. Особенности копирования объектов Конструктор копирования
- •27. Заготовка класса без наследников
- •28. Пример вектора с неповерхностным копированием.
- •29. Излишнее копирование. Конструктор копии. Операции присваивания.
- •1. Излишнее копирование
- •2. Конструктор копирования
- •3. Операции присваивания
- •30. Преобразование типов. Стандартные преобразования. Явное преобразование типов
- •Преобразования указателей и ссылок
- •Явные преобразования типов
- •Неявное преобразование типа
- •31. Преобразования абстрактных типов данных (преобразование типов данных, созданных программистом)
- •32. Наследование классов
- •33. Доступ к наследуемым членам класса
- •34. Стандартные преобразования типов при наследовании
- •35. Инициализация объекта порожденного класса. Конструктор копии. Операция присваивания.
- •3. Операции присваивания
- •37. Виртуальные функции. Объявления виртуальных функций. Чисто виртуальные функции
- •Методы(функции)
- •38. Таблица виртуальных функций. Случаи, когда вызов виртуальной функции не будет виртуальным. Виртуальные деструкторы
- •39. Ввод-вывод файлов. Потоки ввода-вывода. Библиотека ввода-вывода (iostream). Группы классов библиотеки ввода вывода
- •40. Краткая характеристика иерархии классов производных от conbuf.
- •Класс conbuf (constrea.H)
- •Функции-элементы
- •41. Иерархия классов производных от ios
- •42. Состояния потока. Ошибки потоков. Состояние потока
- •С каждым потоком связан набор флагов, которые управляют форматированием потока. Они представляют собой битовые маски, которые определены в классе ios как данные перечисления. Манипуляторы
- •Шаблоны и наследование. Шаблоны и конфигурация компиляторов. Достоинства и недостатки шаблонов.
- •Совместное использование шаблонов и наследования
- •Достоинства и недостатки шаблонов
- •Исключения Применение try, catch, throw
- •47. Обработка исключительных ситуаций. Обработка завершения. Обработка структурных исключений, заявление исключения, фильтрующие выражение. Исключительные ситуации
- •Обработка исключительных ситуаций
- •Обработчик завершения
- •48. Стратегии взаимодействия объектов в программе. Программа как система взаимодействующих объектов. Система объектов, управляемых сообщениями
- •1. Программа, как система взаимодействия объектов.
- •49. Элементы объектно-ориентированного анализа и объектно-ориентированного проектирования. Диаграммы классов. Отношения классов: ассоциация, наследование, агрегация, использование.
- •51. Элементы объектно-ориентированного анализа и объектно-ориентированного проектирования. Диаграммы объектов, назначения, отношения между объектами. Диаграммы объектов (object diagrams)
Обработчик завершения
Обработчик завершения гарантирует, что некий код будет выполнен независимо от того, как завершиться другой блок:
__try
{
}
_finally // обработчик завершения
{
}
Это очень похоже на синтаксис C++ исключений. С помощью ключевого слова __try мы защищаем участок кода. Теперь мы можем обрабатывать все события, которые в нем происходят.
В приведенном примере гарантируется, что блок __finaly будет выполнен независимо от того, как будет осуществлен выход из блока __try: по ошибке или с помощью операторов перехода return, goto. Даже если программист использует longjump – блок __finaly будет все равно выполнен.
Блок __finaly можно использовать для освобождения ресурсов, чтобы избежать из утечки.
Как видите – преимущества налицо. Надо только иметь ввиду, что локальная раскрутка требует значительного времени. Поэтому необоснованное использование этой конструкции может привести к существенному падению производительности. Наибольшие потери происходят если блок __try завершается преждевременно. В других случаях затраты времени минимальны.
Для уменьшения накладных расходов от преждевременного завершения существует ключевое слово _leave. Его можно использовать внутри блока __try. Когда компилятор встречает это слово – происходит выход из блока __try и выполнение блока __finaly. Т.е. его можно рассматривать как переход на закрывающуюся скобку блока __try.В выражении фильтра можно вызвать функцию GetExceptionInformation() или GetExceptionCode () . Первая из них возвращает указатель на структуру EXCEPTION_POINTERS, которая содержит детальную ин-формацию об исключении; вторая возвращает только кодовое значение для исключения.
48. Стратегии взаимодействия объектов в программе. Программа как система взаимодействующих объектов. Система объектов, управляемых сообщениями
1. Программа, как система взаимодействия объектов.
Сущность ООП заключается в первичности данных и их обработки. Причем, любая сущность в программе должна являться объектом. Логическим завершением этого подхода является взгляд на программу как на систему взаимодействующих объектов. При таком подходе, однако, теряется само представление о программе, как о едином потоке данных. При этом важным становится вопрос: Сколько объектов в программе, как они получают информацию друг о друге, кто и когда их создал и уничтожает?
Следует провести грань между динамическими и обыкновенными объектами и переменными. Обычные объекты, имеющие имя, привязаны к управляющей структуре программы, и поэтому, так или иначе связаны с потоком управления программы.
В отличие от статических, динамические объекты могут создаваться когда угодно, и их создание и уничтожение не связано с управляющей структурой программы. Именно динамические объекты позволяют более полно реализовать стратегию программы в виде взаимодействующих между собой объектов.
Как объекты будут знать о существовании друг друга?
Как реализовать универсальные средства, которые будут поддерживать связь и взаимодействие объектов?
1) Программе необходима интегрированная структура данных, которая объединяет все ее объекты, независимо от их класса, времени и места создания.
2) В проге необходимы универсальные средства взаимодействия объектов.
Достаточно иметь базовый класс, который обладает всеми свойствами, когда конструктор включает его в статическую структуру данных.