Typy wyliczeniowe

Możemy stworzyć typ damych, który może przyjmować konkretne, ustalone przez programistę wartości. Deklaracja
enum nazwa_typu {wartość_1, wartość_1, ..., wartość_n};
powoduje stworzenie nowego typu danych o nazwie nazwa_typu, którego możliwe wartości są wymienione. Przykłady:
enum Miesiac{
   Styczen, Luty, Marzec, Kwiecien,
   Maj, Czerwiec, Lipiec, Sierpien,
   Wrzesien, Pazdziernik, Listopad, Grudzien
};

Struktury

Tablice służą do przechowywania wielu danych tego samego typu. Jeśli zachodzi potrzeba przechowania danych rożnych typów, możemy użyć struktur. Deklaracja
struct nazwa_struktury {
   
typ_1 pole_1;
   
typ_2 pole_2;
   
...,
   
typ_n pole_n;
};
powoduje stworzenie nowego typu (struktury) o nazwie nazwa_struktury z polami o wymienionych nazwach i typach. Dostęp do poszczególnych pól uzyskuje się poprzez wyrażenie zmienna.pole. Oto przykład:
struct Student {
   char* nazwisko;
   char* imie;
   int punkty;
};
int main() {
   Student s;
   s.nazwisko="Kowalski";
   s.imie="Jan";
   s.punkty=43;
   s.punkty+=11;
   cout << s.imie << " " << s.nazwisko << " zdobył " << s.punkty << " punktów.";
}
W deklaracji zmiennej typu strukturowego można podać początkowe wartości w następujący sposób
Student s = {"Kowalski", "Jan", 43};

Dynamiczna alokacja pamięci

Z dynamicznej alokacji pamięci korzystamy, gdy podczas pisania programu nie jesteśmy w stanie stwierdzić ile zmiennych będziemy potrzebować. Żeby zarezerwować miejsce w pamięci na nową zmienną używamy operatora new. Niech T będzie dowolnym typem. Wówczas wyrażenie

new T;
powoduje zarezerwowanie w pamięci miejsca na zmienną typu T. Wynikiem tego wyrażenia jest wskaźnik do tej zmiennej. Można również zarezerwować miejsce na wiele zmiennych (tablicę); służy do tego wyrażenie
new T[rozmiar];
gdzie rozmiar jest wyrażeniem typu całkowitego.

Uwaga: Wyrażenie rozmiar nie musi być stałą! Jest to inna sytuacja niż w przypadku alokacji statycznej, tj. tworzenia tablicy przy pomocy deklaracji

T tablica[rozmiar];

Jeśli tworzymy dynamicznie (tj. przy pomocy new) zmienną lub tablicę musimy ją usunąć kiedy nie będzie już potrzebna. Zaniechanie tego nie powoduje błędu działania programu, powoduje jednak, że zarezerwowana pamięć nie może być wykorzystana ponownie przez program - może się zdarzyć, że pamięci komputera będzie nieodwracalnie ubywać, aż w końcu zostanie zupełnie wyczerpana. Do usuwania zmiennych (tablic) służy instrukcja delete. Jeśli p jest wskaźnikiem do typu T instrukcja

delete p;
służy do usunięcia zmiennej wskazywanej przez p, a
delete[] p;
usuwa wskazywaną tablicę.