Struktury w C++

1. Wprowadzenie

Struktura (ang. structure, słowo kluczowe struct) to jeden z podstawowych sposobów grupowania różnych typów danych w jeden logiczny typ. Umożliwia przechowywanie kilku zmiennych (nazywanych polami lub składowymi) w jednym obiekcie, co pozwala na reprezentowanie bardziej złożonych danych.

Struktury w C++ są rozwinięciem struktur znanych z języka C — jednak w C++ mają większe możliwości, ponieważ mogą zawierać:

  • funkcje składowe,
  • konstruktory i destruktory,
  • przeciążenia operatorów,
  • modyfikatory dostępu (public, private, protected),
  • dziedziczenie (tak jak klasy).

2. Składnia i definicja struktury

Podstawowa definicja struktury:

Tworzenie obiektu struktury:

Lub z inicjalizacją:


3. Przykład użycia

Wynik:

Nazywam się Jan Kowalski i mam 30 lat.

4. Różnice między strukturą a klasą w C++

Cecha struct class
Domyślny modyfikator dostępu public private
Dziedziczenie domyślne public private
Zastosowanie Często do prostych danych, rekordów Często do bardziej złożonych obiektów, OOP
Składnia i możliwości Identyczne poza domyślnym dostępem Identyczne poza domyślnym dostępem

W nowoczesnym C++ struktury i klasy są równoważne technicznie — różnica ma głównie charakter semantyczny i stylistyczny.


5. Konstruktor i destruktor w strukturze

Struktura może posiadać konstruktor, destruktor i inne elementy klasy:


6. Zagnieżdżone struktury

Struktury mogą zawierać inne struktury:


7. Wskaźniki i referencje do struktur


8. Tablice i wektory struktur


9. Struktury a typedef i using

Można nadać alias typowi struktury:


10. Struktury anonimowe

Struktura bez nazwy może być użyta do jednorazowego zdefiniowania typu:


11. Struktury a inicjalizacja listowa (C++11+)

C++11 wprowadził tzw. uniform initialization:


12. Dziedziczenie w strukturach

Struktury mogą dziedziczyć po innych strukturach lub klasach:


13. Zastosowania struktur

  • Reprezentacja danych (rekordów, np. pracowników, punktów, produktów),
  • Przekazywanie wielu wartości jako jednego argumentu funkcji,
  • Dane do serializacji, przesyłania przez sieć lub zapis do pliku,
  • Łączenie z C (np. przy użyciu bibliotek systemowych lub API),
  • Tworzenie lekkich typów danych (np. struct Vec3, struct RGB).