
- •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.
- •Согласование экспортируемых элементов с импортируемыми
18.Стандартная библиотека: Контейнеры
Контейнерные классы используются для хранения большого числа отдельных элементов. Типы stack , vector, список являются контейнерными классами.
Контейнеры подразделяются на два основных семейства: последовательные контейнеры и ассоциативные контейнеры. Последовательные контейнеры включают векторы (vectors), списки (lists) и двусторонние очереди. Эти контейнеры упорядочиваются заданием последовательности элементов. Ассоциативные контейнеры включают множества (sets), мультимножества (multisets), отображения (maps), мультиотображения (multimaps) и содержат ключи для поиска элементов. Контейнер-отображение является ассоциативным массивом. Ему необходимо, чтобы была определена операция сравнения для хранимых элементов. Все варианты контейнеров имеют похожий интерфейс.
Интерфейсы типичных контейнеров STL
• конструкторы, включая конструкторы по умолчанию и копирующие конструкторы
• доступ к элементу
• вставка элемента
• удаление элемента
• деструктор
• итераторы
STL-стандартная библиотека шаблонов предоставляющая возможности обобщенного программирования для многих стандартных структур данных и алгоритмов. Тремя ее компонентами являются: контейнеры, итераторы, алгоритмы, которые поддерживают возможности обобщенного программирования.
Для выполнения перебора элементов контейнера создают итератор. Перемещение по контейнерам производится с помощью итератора. Итератор может рассматриваться как усовершенствованный тип указателей. Итератор является шаблоном, который инстанцируется типом контейнерного класса, итерируемого им. Существует пять типов итераторов: ввода, вывода, прохода вперед, двусторонние и произвольного доступа. Не все типы итераторов могут быть доступны для данного контейнерного класса. Например, итератор произвольного доступа доступен для векторов, но не для отображений. Контейнерные классы диктуют выбор категории доступного или необходимого итератора. Та, векторный контейнер допускает итераторы произвольного доступа, а список – нет. Сортировка обычно нуждается в итераторе произвольного доступа, а для поиска нужен лишь итератор ввода.
пример подход к векторному контейнеру может быть выполнен: vector<char>: :iterator
Классы адаптеров контейнеров - это контейнерные классы, которые изменяют имеющиеся контейнеры. Контейнерные адаптеры: стек, очередь, приоритетная очередь.
Недостатки: усложнился доступ к произвольному элементу.
Достоинства: упростился процесс добавления и удаления элемента.
Типичный алгоритм контейнера:
double sum(const deque<double> &dq)
{ deque<double>::const_iterator p;
double s = 0.0;
for(p = dq.begin(); p !=dq.end(); ++ p)
s + = * p;
return s;
}
Итератор р разыменовывается для получения по очереди каждого хранимого элемента.
19 Реализация устойчивости объектов средствами mfc.
Чтобы сериализовать класс, надо выполнить несколько операций.
Сериализация нужна для упаковки данных объекта в архив. Сериализация
Может применяться для хранения данных объекта на жёстком диске.
Операции для сериализации класса:
Нужно наследовать класс от Cobject
Надо переопределить функцию Serialize в этом классе, для этого
Используется Macros Declair_Serial.
Так же надо определить пустой(без параметров) конструктор в классе
И ещё один макрос Implement_Serial
Declair_Serial - пишется внутри тела класса, и в качестве параметра
указывается имя класса
Implement_Serial - Определяется вне класса и используется три параметра:
1-й параметр - <имя класса>
2-ой параметр - <имя класса от которого наследуется>
(обычно Cobject)
3-ий параметр - <int>
Для того чтобы Сериализовать объект, надо создать объект CArchive
- это объект в который записываются данные. В качестве параметра –
<имя файла в который осуществляется запсиь> и параметр на <запись или считывание>
Неявная сериализация
имя архива << имя объекта(который будет сериализироваться) – на запись
имя архива >> имя объекта(который будет сериализироваться) – на чтение