Krzysztof Mossakowski
Materiały dla studentów
 

Kolekcje

MFC
Spis treści

Kolekcje
Informacje ogólne
Podstawowe struktury danych
Wskaźniki z typami
Zwiększanie funkcjonalności

  •  Informacje ogólne

    • Kolekcje (collections) to klasy pomocnicze w MFC implementujące podstawowe struktury danych

    • Tylko w MFC wersji 1.0 kolekcje nie były oparte na wzorcach (templates) języka C++, obecnie są

      • zalecane jest używanie starych klas tylko w przypadku rozwijania starych programów

[początek strony]

  •  Podstawowe struktury danych

    • CArray <ARG, ARG_TYPE>

      • tablica, np. CArray <CPerson, CPerson&> myArray;

      • dodawanie elementów: CArray::Add, CArray::InsertAt

      • iterowanie: CArray::GetAt albo operator []

      • usuwanie:
        - dla każdego obiektu wywołać delete
        - dla tablicy wywołać CArray::RemoveAt lub CArray::RemoveAll

    • CList <ARG, ARG_TYPE>

      • lista, np. CList <CPerson, CPerson&> myList;

      • dodawanie elementów: CList::AddHead, CList::AddTail, CList::InsertBefore, CList::InsertAfter

      • iterowanie: CList::GetHeadPosition, CList::GetNext

      • usuwanie analogicznie do CArray

    • CMap <KEY, ARG_KEY, VALUE, ARG_VALUE>

      • słownik, np. CMap <CString, LPCSTR, CPerson, CPerson&> myMap;

      • dodawanie elementów: CMap::SetAt

      • iterowanie: CMap::GetStartPosition, CMap::GetNextAssoc

      • usuwanie:
        - dla każdego obiektu delete
        - CMap::RemoveKey lub CMap::RemoveAll

[początek strony]

  •  Wskaźniki z typami

    • Dane trzymane są jako TYPE a dostęp do nich jest poprzez BASE_CLASS

      • dając sprawdzanie typów wskaźników ułatwia eliminowanie błędów wynikających z błędnych typów wskaźników

    • CTypedPtrArray <BASE_CLASS, TYPE>

      • BASE_CLASS może być: CObArray lub CPtrArray

      • lista, np. CTypedPtrArray <CObArray, CPerson*> myPtrArray;

    • CTypedPtrList <BASE_CLASS, TYPE>

      • BASE_CLASS może być: CObList lub CPtrList

      • lista, np. CTypedPtrArray <CPtrList, CPerson*> myPtrList;

    • CTypedPtrMap <BASE_CLASS, KEY, VALUE>

      • BASE_CLASS może być: CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb

      • lista, np. 
        CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap
        ;
        CTypedPtrMap<CMapStringToOb, CString, CMyObject*> myObjectMap

[początek strony]

  •  Zwiększanie funkcjonalności

    • Jeśli działanie standardowych funkcji nie jest wystarczające, można nadpisać następujące funkcje:

      • CompareElements - porównywanie dwóch elementów
        - nadpisywana w przypadku potrzeby niestandardowych porównań elementów

      • ConstructElements - inicjalizacja elementów
        - do nadpisania gdy elementy potrzebują specjalnej inicjalizacji

      • CopyElements - kopiowanie elementów
        - standardowa wykorzystuje operator = lub kopiowanie bitowe

      • DestructElements - niszczenie elementów
        - do nadpisania w przypadku potrzeby wykonania pewnych czynności przed zniszczeniem

      • DumpElements - wypisanie diagnostyczne podczas debugowania
        - standardowa implementacja jest pusta

      • HashKey - funkcja haszująca
        - standardowa dokonuje przesunięcia o cztery bity w prawo

      • SerializeElements - serializacja elementów
        - standardowa implementacja to bitowy zapis/odczyt

[początek strony]