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

20.2.Шаблонные классы коллекций mfc

Ниже рассматриваются типо-безопасные шаблонные классы коллекций MFC версий 3.0 и более поздних. Использование этих шаблонных классов для создания типо-безопасных коллекций является более удобным и надежным по сравнению с использованием нешаблонных классов.

MFC предоставляет две категории шаблонных коллекций:

  • простые массивы CArray, списки CList и ассоциативные массивы CMap;

  • массивы CTypedPtrArray, списки CTypedPtrList и ассоциативные массивы типизированных указателей CTypedPtrMap.

Так как все эти коллекции производны от класса CObject, то все они, как правило, наследуют сериализацию, динамическое создание и другие свойства CObject. Классы коллекций типизированных указателей требуют указать в качестве родительского класса какую-либо нешаблонную коллекцию указателей, например, CPtrList или CPtrArray. Ваш новый класс коллекции является наследником указанного базового класса и его член-функции используют вызовы функций базового класса для усиления типо-безопасности.

20.3.Использование массивов, списков и ассоциативных массивов

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

Шаблонные классы CArray и CList имеют два параметра: TYPE и ARG_TYPE. Эти классы могут сохранять данные любого типа, который Вы должны указать в качестве параметра TYPE:

фундаментальные (основные) типы, такие как int, char, float и т.д.;

структуры и классы С++;

другие пользовательские типы.

Классы CArray и CList объявлены в файле Afxtempl.h так:

template<class TYPE, class ARG_TYPE>

class CArray : public CObject

{…};

template<class TYPE, class ARG_TYPE>

class CList : public CObject

{

protected:

struct CNode

{

CNode* pNext;

CNode* pPrev;

TYPE data;

};

{…};

Для удобства и эффективности Вы можете использовать параметр ARG_TYPE для определения типа аргументов функций. Обычно в качестве ARG_TYPE указывают ссылку на тип TYPE. Например:

#include <Afxtempl.h>

…

CArray<int, int> myArray;

CList<CPerson, CPerson&> myList;

Класс myArray представляет собой массив целых чисел, а myList – список классов CPerson.

20.3.2.Члены класса cArray

В приведенной ниже таблице представлены члены класса CArray, а ниже дано их более полное описание. Ключевым моментом класса является возможность индексирования элементов массива целым числом от 0 до N-1, где N – число элементов массива. При обращении к элементам массива по индексу, например, с помощью перегруженной операции [], недопустимо обращаться к несуществующим элементам, так как автоматического расширения размера массива в этом случае не происходит. Вместе с тем автоматическое расширение массива происходит при использование функций Add(), SetAtGrow(), Append(), Copy().

Таблица 1

Члены класса CArray

Конструктор класса CArray

CArray

Создает пустой массив

Атрибуты класса CArray

GetSize

Возвращает число элементов массива

GetUpperBound

Возвращает максимальный допустимый индекс (на единицу меньше GetSize())

SetSize

Задает число элементов массива

Обработка

FreeExtra

Освобождает всю неиспользуемую память за верхним индексом массива

RemoveAll

Удаляет все элементы массива

Доступ к элементам массива

GetAt

Возвращает значение с указанным индексом

SetAt

Присваивание нового значения элементу массива

ElementAt

Возвращает временную ссылку на элемент массива

GetData

Разрешает непосредственный доступ к элементам массива

Увеличение размера массива

SetAtGrow

Присваивание нового значения элементу массива

Add

Добавляет новый элемент в конец массива

Append

Добавляет новый массив к существующему

Copy

Копирует массив в существующий

Вставки и удаления

InsertAt

Вставляет новый элемент в массив

RemoveAt

Удаляет элемент из массива

Перегруженные операции

operator []

Позволяет получить или изменить значение элемента массива по его индексу

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