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).