Compartilhar via


Classes de modelo

Este artigo explica as classes de coleção de baseado em modelo de tipo seguro no MFC versão 3.0 e posterior.Usando esses modelos para criar conjuntos de tipo seguro é mais conveniente e ajuda a fornecer segurança de tipos mais eficiente do que usando as classes de coleção não baseadas em modelos.

MFC predefine duas categorias de coleções de modelo:

  • Matriz simples, lista e classes de mapa

    CArray, CList, CMap

  • Matrizes, listas e mapas de ponteiros digitados

    CTypedPtrArray, CTypedPtrList, CTypedPtrMap

As classes de coleção simples são derivadas da classe CObject, portanto, eles herdam a serialização, criação dinâmica e outras propriedades de CObject.As classes de coleção de ponteiro digitado exigem que você especifique a classe derive de — que deve ser uma das coleções de ponteiro nontemplate predefinidas pelo MFC, como CPtrList ou CPtrArray.Sua nova classe de coleção herda da classe base especificada e funções de membro da classe nova usam encapsuladas chamadas para os membros da classe base para reforçar a segurança de tipo.

Para obter mais informações sobre modelos C++, consulte modelos de na Referência da linguagem C++.

Usando a matriz simples, lista e modelos de mapa

Para usar os modelos de coleção simples, você precisa saber que tipo de dados que você pode armazenar essas coleções e quais parâmetros para usar em suas declarações de coleção.

f728cbk3.collapse_all(pt-br,VS.110).gifMatriz simples e uso de lista

Matriz simples e classes de lista CArray e CList, levar dois parâmetros: tipo e ARG_TYPE.Essas classes podem armazenar qualquer tipo de dados que você especificar o tipo parâmetro:

  • Tipos de dados C++ fundamentais, como int, char, e float

  • Classes e estruturas de C++

  • Outros tipos que você definir

Para maior conveniência e eficiência, você pode usar o ARG_TYPE parâmetro para especificar o tipo de argumentos da função.Normalmente, você especificar ARG_TYPE como uma referência para o tipo de chamada na tipo parâmetro.Por exemplo:

CArray<int, int> myArray;
CList<CPerson, CPerson&> myList;

O primeiro exemplo declara uma coleção de matriz, myArray, que contém ints.O segundo exemplo declara uma coleção de lista, myList, que armazena CPerson objetos.Determinadas funções de membro das classes de coleção levam argumentos cujo tipo é especificado pelo ARG_TYPE parâmetro do modelo.Por exemplo, o Add função de membro da classe CArray leva um ARG_TYPE argumento:

CArray<CPerson, CPerson&> personArr;
CPerson person;
personArr.Add(person);

f728cbk3.collapse_all(pt-br,VS.110).gifUso do mapa simples

Classe mapa simples, CMap, aceita quatro parâmetros: chave, ARG_KEY, valor, e ARG_VALUE.Como as classes array e list, as classes de mapa podem armazenar qualquer tipo de dados.Ao contrário de matrizes e listas, indexar e solicitar os dados que eles armazenam, mapas associar chaves e valores: acessar um valor armazenado em um mapa, especificando a chave associada do valor.O chave parâmetro especifica o tipo de dados das chaves usadas para acessar dados armazenados no mapa.Se o tipo de chave é uma estrutura ou classe, o ARG_KEY parâmetro normalmente é uma referência para o tipo especificado em chave.O valor parâmetro especifica o tipo de itens armazenados no mapa.Se o tipo de ARG_VALUE é uma estrutura ou classe, o ARG_VALUE parâmetro normalmente é uma referência para o tipo especificado em valor.Por exemplo:

CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;
CMap< CString, LPCTSTR, CPerson, CPerson& > myMap2;

A primeira armazena exemplo MY_STRUCT valores, acessa-los por int chaves e retorna acessada MY_STRUCT itens por referência.Segunda exemplo lojas CPerson valores, acessa-los por CString chaves e retorna referências a itens acessados.Este exemplo pode representar um catálogo de endereços simples, no qual você pesquisar pessoas pelo sobrenome.

Porque o chave parâmetro é do tipo CString e o KEY_TYPE parâmetro é do tipo LPCSTR, as chaves são armazenadas no mapa como itens do tipo CString , mas mencionado em funções, como SetAt através de ponteiros de tipo LPCSTR.Por exemplo:

CMap< CString, LPCTSTR, CPerson, CPerson& > myMap;
CPerson person;
LPCTSTR lpstrName = _T("Jones");
myMap.SetAt(lpstrName, person);

Usando modelos de coleção de ponteiro digitado

Para usar os modelos de coleção de ponteiro digitado, você precisa saber quais tipos de dados que você pode armazenar essas coleções e quais parâmetros para usar em suas declarações de coleção.

f728cbk3.collapse_all(pt-br,VS.110).gifMatriz ponteiro digitado e o uso de lista

Matriz digitada-ponteiro e classes de lista CTypedPtrArray e CTypedPtrList, levar dois parâmetros: BASE_CLASS e tipo.Essas classes podem armazenar qualquer tipo de dados que você especificar o tipo parâmetro.Eles são derivados de uma das classes de coleção nontemplate armazena ponteiros; especificar essa classe base no BASE_CLASS.Arrays, use CObArray ou CPtrArray.Para listas, use CObList ou CPtrList.

Na verdade, quando você declara uma coleção com base em, digamos que CObList, a nova classe herda não apenas os membros de sua classe base, mas também declara um número de membro de tipo seguro adicional funções e operadores que ajudam a fornecer segurança de tipos, encapsulando chamadas para membros de classe base.Esses encapsulamentos gerenciam todos conversão de tipo necessário.Por exemplo:

CTypedPtrArray<CObArray, CPerson*> myArray;
CTypedPtrList<CPtrList, MY_STRUCT*> myList;

O primeiro exemplo declara uma matriz ponteiro digitado, myArray, derivada de CObArray.A matriz armazena e retorna os ponteiros para CPerson objetos (onde CPerson é uma classe derivada de CObject).Você pode chamar qualquer CObArray função de membro, ou você pode chamar o novo tipo seguro GetAt e ElementAt funções ou usar tipo seguro operador.

O segundo exemplo declara uma ponteiro digitado lista, myList, derivada de CPtrList.A lista armazena e retorna os ponteiros para MY_STRUCT objetos.Uma classe com base em CPtrList é usado para armazenar ponteiros para objetos não derivados de CObject.CTypedPtrListhas a number of type-safe member functions: GetHead, GetTail, RemoveHead, RemoveTail, GetNext, GetPrev, and GetAt.

f728cbk3.collapse_all(pt-br,VS.110).gifUso do mapa de ponteiro digitado

Classe digitado-ponteiro mapa, CTypedPtrMap, três parâmetros: BASE_CLASS, chave, e valor.O BASE_CLASS parâmetro especifica a classe da qual derivam da nova classe: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToObe assim por diante.CHAVE é semelhante a chave em CMap: Especifica o tipo da chave usada para pesquisas.VALOR é semelhante a valor em CMap: Especifica o tipo de objeto armazenado no mapa.Por exemplo:

CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;
CTypedPtrMap<CMapStringToOb, CString, CPerson*> myPersonMap;

O primeiro exemplo é um mapa baseado em CMapPtrToPtr — ele usa CString chaves mapeadas para ponteiros para MY_STRUCT.Você pode pesquisar um ponteiro armazenado chamando tipo seguro Lookup função de membro.Você pode usar o operador para pesquisar um ponteiro armazenado e adicioná-lo se não encontrado.E você pode iterar o mapa usando a segurança de tipo GetNextAssoc função.Você também pode chamar outro membro funções da classe CMapPtrToPtr.

O segundo exemplo é um mapa baseado em CMapStringToOb — ele usa chaves de seqüência de caracteres mapeadas para armazenados ponteiros para CMyObject objetos.Você pode usar os mesmos membros de tipo seguro descritos no parágrafo anterior, ou você pode chamar membros da classe CMapStringToOb.

ObservaçãoObservação

Se você especificar um classe ou struct tipo para o valor parâmetro, em vez de um ponteiro ou uma referência para o tipo, classe ou estrutura deve ter um construtor de cópia.

Para obter mais informações, consulte como fazer uma coleção de tipo seguro.

Consulte também

Conceitos

Coleções