
- •1. Признаки сложных систем. Сложность, присущая программному обеспечению.
- •2. Компоненты объектно-ориентированного подхода.
- •3. Объекты и классы с точки зрения объектно-ориентированного проектирования.
- •4. Модели и диаграммы, используемые в объектно-ориентированном подходе.
- •5. Техника отладки.
- •6. Работа с многофайловыми проектами. Использование включаемых файлов.
- •9. Простое наследование. Контроль доступа к атрибутам класса.
- •10. Виртуальные функции (вф) и абстрактные классы.
- •11. Множественное и виртуальное наследование.Множественное наследование
- •12 Перегрузка операций
- •13. Шаблоны функций, макросы, inline-функции.
- •14. Шаблоны классов.
- •15. Обработка исключительных ситуаций, структурная обработка исключений.
- •16. Пространства имён. Кратко о механизме пространства имен
- •Зачем нужен механизм пространства имен?
- •Имитация средствами языка Си
- •Правило составления имени
- •Недостатки
- •17 Строки и потоки.
- •18.Стандартная библиотека: Контейнеры
- •19 Реализация устойчивости объектов средствами mfc.
- •20. Структура Windows-приложения WinApi
- •21. Структура Windows-приложения, использующего библиотеку mfc
- •Документы и их представление
- •22. Обработка сообщений
- •23. Контекст устройства
- •24.Объекты gdi
- •25.Использование контекста отображения в памяти.
- •26.Режимы отображения.
- •27.Работа с меню. Обработка сообщений.
- •28.Работа с диалогами. Обработка сообщений.
- •29. Работа с полями ввода и кнопками.
- •30. Работа со списками и выпадающими списками. Работа со списком
- •Работа с комбинированном списком
- •Инициализация
- •Операции со строками
- •31. Классы CimageList и CtreeCtrl. Класс cImageList
- •Изменение содержимого списка
- •32. Классы CimageList и ClistCtrl. Класс cImageList
- •Изменение содержимого списка
- •Создание просмотра списка
- •Работа со столбцами
- •Функции для работы со списком в целом
- •Рабочие области просмотра списка
- •Поиск и сортировка записей
- •33. Классы CprogressCtrl, cRichEdit Ctrl, CsliderCtrl, cSpinButton Ctrl.
- •34. Классы cPropertySheet и cPropertyPage.
- •35. Передача информации в диалог и обратно.
- •36. Работа со стандартными диалогами.
- •37.Обработка сообщений от клавиатуры и мыши(wm_char,wm_keYxxx,wm_xButtoNxxx,
- •38 Таймеры, использование времени простоя программы и локального цикла обработки сообщений.
- •39. Библиотеки динамической компоновки. Явная и неявная загрузка dll.
- •Согласование экспортируемых элементов с импортируемыми
12 Перегрузка операций
С++ позволяет переопределить действия большинства операций так, чтобы при использовании с объектами конкретного класса они выполняли заданные функции. Можно использовать собственные типы данных так же, как и стандартные. Можно перегружать любые операции в С++. Кроме . .* ?: :: # ## sizeof
Перегрузка осуществляется с помощью методов специального вида(функций операций) и подчиняется определенным правилам:
1.При перегрузке сохраняется количество аргументов и приоритеты операций
2.Для стандартных типов данных переопределять операции нельзя
3.Функции операций не могут иметь аргументов по умолчанию
4.Они наследуются, кроме (=)
5.Они не могут определяться, как static
Функцию операцию можно определить 3-мя способами:
-метод класса
-дружественная функция класса
-обычная функция
(в 2-ух последних случаях функция должна принимать хотя бы один аргумент, имеющий тип класса, указателя или ссылки)
Определяются как
Тип operator операция(стас. параметр)
{тело функции}
Операции постфиксного инкремента и декремента должны иметь первый параметр типа int! Используется, чтобы отличить их от префиксной формы.
Class students{
…
students operator ++(int)
{
students M(*this); list++;
return M;
}
};
students Dmitriy;
cout<<(Dmitriy++).get_list();
13. Шаблоны функций, макросы, inline-функции.
Независимые концепции д. б. представлены независимо и объединяться только при необходимости. При нарушении этого принципа либо объединяются несвязанные концепции, либо создаются ненужные зависимости. Это не гибкий набор компонент для построения системы. Шаблоны у ф-ий - для преодоления проблемы исп-ия одной и той же inline ф-ии - обеспечивают простой способ введения разного рода общих концепций и простые методы их совместного использования. Получающиеся в результате классы и ф-ии сопоставимы по времени выполнения и требованиям к памяти с написанным вручную специализированным кодом. Шаблон явл. механизмом параметризации определения класса или ф-ии произвольным типом. Код, реализующий шаблон, идентичен для всех типов параметров. Шаблоны поддерживают программ-ие с использованием типов в качестве параметров. Наиболее очевидным применением шаблонов явл-ся определение и использование классов-контейнеров. Сразу же возникает потребность в шаблонах ф-ий. Аргументы шаблонов ф-й: шаблоны имеют большое значение при написании обобщенных алгоритмов, применимых к широкому спектру типов контейнеров. Важно: возможность выведения типа аргументов шаблона ф-ии по типам аргументов при ее вызове. Это возможно, если список аргументов ф-ии однозначно идентифицирует набор аргументов шаблона. При невыполнении этого условия необходимо указать аргумент явно. Макросы: первое правило о макросах: не надо их использовать, если мы не обязаны этого делать. Макросы изменяют текст проги до обработки его компилятором, они создают проблемы для многих инструментов разработки. Макрос можно определить с аргументами: #define MAC(x,y) argument1:x argument2:y. Имена макросов нельзя перегружать, они манипулируют строками символов и мало что знают о синтаксисе С++. Компилятор видит текст только после макроподстановки, поэтому и ошибка в макросе будет замечена после подстановки, а не в месте его определения. Это может привести очень странным сообщениям об ошибках. При работе с макросами, чтобы обезопасить себя, пользуйтесь оператором разрешения области видимости. Inline ф-я: каждая ф-я, вызываемая в проге, д. б. определена (и только один раз). Определение ф-ии явл-я объявлением ф-ии, в кот. присутствует тело ф-ии: Extern void swap (int*, int*); // объявление
Void swap (int* р , int* q) // определение
{ int t = *р; *р = *q; *q = t; }. Типы в определении и объявлениях ф-ии должны совпадать. Однако имена аргументов не явл-ся частью типа и не обязаны совпадать. Бывают ф-ии, имеющие неиспользуемый аргумент. Наличие аргумента, пусть и не используемого, обеспечивает независимость вызывающих прог от этих изменений. Ф-ю можно определить также со спецификатором inline такие ф-ии наз-ся встроенными. Спецификатор inline указывает компилятору, что он должен пытаться каждый раз генерировать в месте вызова кода, соответствующий ф-ии fac() (факториал).