Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

20.4.1.Использование массивов и списков типизированных указателей

Шаблоны массивов CTypedPtrArray и списков CTypedPtrList типизированных указателей требуют два параметра: BASE_CLASS и TYPE. Эти классы могут сохранять типы данных, которые указаны в параметре TYPE. Эти классы наследуются от одного из нешаблонных классов коллекций, которые хранят указатели. Этот самый базовый класс указывается как параметр BASE_CLASS. Для массивов надо использовать CObArray или CPtrArray, а для списков – CObList или CPtrList.

В результате, когда Вы объявляете коллекцию на основе, скажем, CObList, новый класс не только наследует члены своего базового класса, но и также содержит объявления ряда типо-безопасных функций и операций, которые обеспечивают типо-безопасность путем вызова член-функций базового класса. Инкапсулированные функции поддерживают все необходимые преобразования типов. Например:

CTypedPtrArray<CObArray, CPerson*> myArray;

CTypedPtrList<CPtrList, MY_STRUCT*> myList;

В первом примере объявляется массив myArray типизированных указателей на объекты класса CPerson (который предполагается производным от CObject). Теперь Вы можете вызывать любую член-функцию класса или новые типо-безопасные функции GetAt() и ElementAt() или использовать перегруженную операцию доступа по индексу [].

Во втором примере объявляется список типизированных указателей myList, производный от CPtrList. Список хранит и возвращает указатели на объекты типа MY_STRUCT. Класс, наследуемый от CPtrList, используется для хранения указателей на объекты, которые не являются производными от CObject. Класс имеет ряд типо-безопасных функций: GetHead(), GetTail(), RemoveHead(), RemoveTail(), GetNext(), GetPrev() и GetAt().

20.4.2.Использование типизированных указателей на ассоциативные массивы

Шаблон класса типизированных указателей на ассоциативные массивы CTypedPtrMap имеет три параметра: BASE_CLASS, KEY и VALUE. Параметр BASE_CLASS указывает на базовый класс, от которого наследуется объявляемый: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb и т.д. Параметр KEY аналогичен такому же параметру класса CMap: он указывает тип ключа, который используется для доступа к элементам коллекции. Параметр VALUE аналогичен такому же параметру CMap: он специфицирует тип объектов, которые сохраняются в массиве. Например:

CTypedPtrMap <CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;

CTypedPtrMap <CMapStringToOb, CString, CMyObject*> myObjectMap;

В первом примере объявляется ассоциативный массив, производный от CMapPtrToPtr, и он использует ключи типа CString . Эти ключи служат для доступа к указателям на MY_STRUCT. Вы можете использовать функцию Lookup() для поиска требуемого элемента или использовать перегруженную операцию доступа по индексу [] для добавления нового элемента. И Вы также можете перебирать элементы массива с использованием типо-безопасной функции GetNextAssoc() или любые другие функции базового класса CMapPtrToPtr.

Во втором примере объявляется ассоциативный массив, производный от CMapStringToOb, и он использует ключи типа CString. Эти ключи служат для доступа к указателям на CMyObject. Вы можете использовать такие же типо-безопасные член-функции, как и в первом примере.

Замечание. Если в качестве параметра Вы указываете структуру или класс, а не указатель или ссылку на этот тип, структура или класс должны иметь конструктор копирования.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]