Параметры классов-шаблонов
CMap требует 4 параметра:
· тип ключей
· если тип ключей структура или класс, то тип аргумента для класса «тип_ключа&», т.е. ссылочный.
· тип-значений, сопоставимых ключа в отображении
· если тип 3-го параметра структура или класс, то тип аргумента для класса «тип_ значения&», т.е. ссылочный
Пример:
CMap<int,int,MY_STRUCT, MY_STRUCT&> myMap1;
Если в отображении в качестве ключа используется CString, то в качестве 2-го параметра надо указать LPCTSTR.
Шаблон-базированые совокупности ссылок требуют своих параметров. Так, CTypedPthArray, CTypedPtrList используют 2 параметра: базовый класс и тип элементов.
В 1-м случае в качестве базового класса надо указать: CObArray или CPtrArray, во 2-м случае: CObLisr, CPtrList. Таким образом достаточны операции базовых классов.
Класс COb..... указывается, если используются ссылки на классы, выводимы из CObject, а CPtr…… когда ссылки на классы не выводимы из CObject;
Параметризированый класс CTypedPtrMap требует 3-х параметров:
· базовый класс
· тип ключа
· тип значений хранимых в совокупности.
В качестве базового необходимо указать не шаблон базированный класс, определенный для реализации отображений: CMapPtrToWord, CMapPtrToPtr …
Пример
CTypedPtrMap<CMapPtrToPtr,CString,MY_STRUCT*> myPtrMap;
Определяется совокупность, представления отображение из множества объектов класса CString в указатели на тип MY_STRUCT. Если в качестве типа для значения (3-го параметра) используется класс или структура указатель на них, то необходимо, чтобы соответствующий класс или структура имели копирующий конструктор..
Для реализации итераций над совокупностями необходимо использовать следующие методы:
· для массивов GetAt(индекс)
· для списков GetNext(размещение), где размещение типа POSITION (тип ссылка для элементов списков)
· для отображений GetNetAssoc(размещение, ключ, значение); здесь ключ и значение – переменные, куда будут передаваться ключ и значение.
Пример
CMap<CString, LPCTSTR,CPerson*,CPerson*> myMap;
POSITION pos = myMap.GetStartPosition();//получение начального размещения
while (pos!=NULL)
{
CPerson* pPerson;
CString str;
myMap.GetNextAssoc(pos, str,pPerson);
//используем str, pPerson
}
Для получения размера массива используется GetSize(). Для получения начального размещения элемента в списке: GetHeadPosition(), GetStartPosition().
Для удаления элементов из совокупностей надо итеративно удалить все элементы из совокупности с использованием оператора delete и затем выполнить RemoveAll(). Для удаления отдельных элементов надо вызвать RemoveAt() или RemoveKey() – для отображений
Вопросы для самоконтроля
· Перечислите классы стандартных блоков диалога!
· Как выполнить установку фильтров файлов в классе CFileDialog?
· Как выполняется работа с файлами вне библиотеки MFC?
· Как выполняется работа с объектом класса CFile?
· Перечислите шаблон-базированные классы совокупностей!
· Каковы критерии отбора классов структурных типов данных?
Вопросы для самостоятельного изучения
· Какие операторы позволяют выполнить взаимные преобразования между классом String и типом char *?
Лекция 25. Разработка диалогового приложения в С++. Основной инструментарий
Многодокументный интерфейс DevStudio или Visual C++
Окно содержит меню с обычными основными пунктами и несколькими дополнительными, предназначенными для вызова компилятора, отладчика и работы с ресурсами (такими как окна, битовые карты (bitmap) и символьные константы сообщений, надписей и подсказок). В процессе создания программ и окон проекта окно DevStudio делится на такие части:
- в левой части окно с закладками, которое позволяет рассматривать проект как иерархию классов, - наборы файлов в проектах и их конфигурациях, совокупность ресурсов в проектах, источники данных, если используются средства СУБД; кроме того, имеется вкладка справочной системы, где содержится введение, описание С и С++, описания примеров, иерархия классов, руководство программиста, описание Win32API – интерфейса, описания технологий и т.д.
- в правой частиоконный фрейм, который может включать сколько угодно окон, с текстами программ, открытыми для редактирования, ресурсами, разделами справочной системы.
- окно снизу открывается для вывода сообщений компилятора и редактора связей. Могут открыться окна в процессе отладки для контроля вычисляемых выражений и переменных, а также отслеживание сообщений к окнам.
Любой проект по умолчанию создаётся в 2-х конфигурациях: отладочной(Debug) и с включенными опциями оптимизации по умолчанию (Release). Можно создать дополнительно ещё и свои конфигурации.
Типы проектов
Визарды DevStudio помогают создать каркас проекта. Типов проектов достаточно много. На начальных этапах достаточно знание следующих:
- AppWizard (exe, dll) – exe – программа или dll – библиотека функций; возможное создание диалоговых приложений, однооконных (SDI) или много оконных (MDI), на основе MFC – классов С++.
- Console Application - программа консольного типа с Dos – окном, использование обычных функций scanf(), printf() и т.д., вообще стандартной библиотеки С.
- Win32 Application – программа без использования MFC классов, но с использованием Win32API функций, средств ОС.
- Static Library – статическая библиотека функций совместимая с MFC классами и Win32API;
- Dynamic Linked Library - динамическая библиотека функций Win32API DLL, компилируется сразу для использования несколькими приложениями.
Кстати AppWizard разрешает использование Win32API, но с классами, при этом возникают некоторые проблемы с сообщениями об ошибках.
Дата добавления: 2016-05-26; просмотров: 1436;