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
};
struct nazwa_struktury {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:
typ_1 pole_1;
typ_2 pole_2;
...,
typ_n pole_n;
};
struct Student {W deklaracji zmiennej typu strukturowego można podać początkowe wartości w następujący sposób
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.";
}
Student s = {"Kowalski", "Jan", 43};
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ę.