Dokumentacja C++
Zwięzła dokumentacja C++ oparta na przykładach. Przeczytaj o zagadnieniu, zobacz kod i przećwicz go na ścieżce Coddy.
Zacznij ścieżkę C++ z przewodnikiemGetting Started
- Czym jest C++Czym właściwie jest C++, dlaczego kompiluje się prosto do natywnego kodu maszynowego i jakie oprogramowanie o wysokiej wydajności się w nim tworzy.
- Hello WorldProgram Hello World w C++ wyjaśniony linijka po linijce: #include <iostream>, int main(), std::cout i <<, std::endl a '\n', return 0, a do tego kompilacja i naprawa pierwszych błędów, na które trafiają początkujący.
- Instalacja C++Jak zainstalować kompilator C++ (GCC, Clang albo MSVC), wybrać zestaw narzędzi dla swojego systemu i sprawdzić w wierszu poleceń, że działa.
- Kompilacja C++Jak C++ zamienia kod źródłowy .cpp w natywny plik wykonywalny: kompilacja przez g++ (albo clang++/MSVC), uruchomienie programu i czytanie błędów kompilatora, gdy coś pójdzie nie tak.
- Składnia C++Podstawowe reguły składni programu w C++: instrukcje i średniki, bloki w klamrach, funkcja main i wypisywanie danych, wyjaśnione na przykładzie pierwszego programu.
- KomentarzeJak pisać komentarze w C++: jednoliniowe notatki // i wieloliniowe bloki /* */, jak zakomentować kod, dlaczego komentarzy blokowych nie da się zagnieżdżać i co sprawia, że komentarz jest wart zachowania.
Variables & Types
- ZmienneJak działają zmienne w C++: deklaracja z typem, różnica między przypisaniem a inicjalizacją, inicjalizacja klamrowa, zasady nazewnictwa oraz zasięg, który decyduje, gdzie zmienna żyje i kiedy znika.
- Typy danychPraktyczny przegląd podstawowych typów danych w C++: liczb całkowitych, zmiennoprzecinkowych, char i bool, a do tego rozmiary, signed i unsigned, literały z przyrostkami, przepełnienie i wybór właściwego typu.
- Słowo kluczowe autoJak słowo kluczowe `auto` pozwala kompilatorowi wywnioskować typ zmiennej za ciebie: co odrzuca, gdzie się sprawdza i jakie pułapki czekają na początkujących.
- Stałe i constJak deklarować wartości tylko do odczytu w C++ za pomocą const, czym różni się const od constexpr, stały wskaźnik od wskaźnika na stałą oraz czym są metody const.
- OperatoryPoznaj operatory w C++: arytmetyczne, porównania, logiczne, przypisania i bitowe, a do tego pułapki związane z dzieleniem całkowitym, priorytetem i obliczaniem na skróty.
- Rzutowanie typówJak działa rzutowanie typów w C++: konwersje niejawne, pułapka dzielenia całkowitego i cztery nazwane rzutowania (static_cast, const_cast, reinterpret_cast, dynamic_cast) wraz z pułapkami, które po cichu gubią dane.
Control Flow
- if-elseJak podejmować decyzje w C++ za pomocą if, else if i else: warunki, łańcuchy gałęzi, zagnieżdżanie, operator trójargumentowy, if z inicjalizatorem i pułapki, na które wszyscy trafiają.
- switchInstrukcja switch w C++ krok po kroku: etykiety case, break i przechodzenie do kolejnych przypadków (fall-through), gałąź default, grupowanie przypadków, switch na typach enum oraz pułapki z deklaracjami wewnątrz case.
- Pętla forJak powtarzać kod pętlą for w C++: trzyczęściowy nagłówek, liczenie w górę i w dół, przechodzenie po tablicach, zagnieżdżanie, break i continue oraz błędy o jeden i pułapki typów bez znaku, które łapią każdego.
- Pętle whilePętla while w C++ krok po kroku: while sprawdzająca warunek na początku, do-while wykonująca się co najmniej raz, pętla do wartości wartowniczej, break i continue oraz sposoby na uniknięcie pętli nieskończonych.
- Pętla for po zakresiePętla for po zakresie (range-based for) w C++ wyjaśniona: czysta iteracja po tablicach, wektorach, napisach i mapach, dlaczego warto używać auto& i const auto& oraz pułapki kopiowania i unieważnienia iteratorów.
Functions
- FunkcjeJak pisać funkcje w C++: budowa z typem zwracanym, nazwą i parametrami, deklaracje a definicje, zwracanie wartości, funkcje void oraz pułapki, takie jak brakujący return i zapomniane prototypy.
- Parametry funkcjiJak argumenty trafiają do funkcji w C++: przekazywanie przez wartość i przez referencję, referencje const do taniego odczytu, argumenty domyślne, wskaźniki i pułapki kosztownego kopiowania, które po cichu spowalniają programy.
- ReferencjeReferencje w C++ wyjaśnione: jak & w parametrze tworzy alias, dlaczego przekazywanie przez referencję unika kopii i pozwala funkcji zmieniać zmienne wywołującego, kiedy sięgać po const& i kiedy referencje, a kiedy zwracanie wartości.
- Przeciążanie funkcjiPrzeciążanie funkcji w C++ pozwala kilku funkcjom dzielić jedną nazwę, o ile różnią się listą parametrów. Dowiedz się, jak rozstrzyganie przeciążeń wybiera dopasowanie, dlaczego sam typ zwracany się nie liczy i jak unikać pułapek niejednoznaczności i argumentów domyślnych.
- LambdyPisz małe funkcje w miejscu użycia dzięki lambdom w C++: składnia, jak działa przechwytywanie, kiedy użyć `mutable` i pułapka wiszącego przechwycenia, na którą trafia każdy.
Pointers & Memory
- WskaźnikiWskaźniki w C++ wyjaśnione od podstaw: deklaracja wskaźnika, operatory & (adres) i * (dereferencja), nullptr, wskaźniki do tablic oraz pułapki wiszących i niezainicjalizowanych wskaźników, które powodują awarie.
- Referencje a wskaźnikiPraktyczne porównanie referencji i wskaźników w C++: co mają wspólnego, czym się różnią (przestawianie, null, arytmetyka) i jasna zasada, po które narzędzie sięgać w codziennym kodzie.
- Pamięć dynamicznaJak alokować pamięć w czasie działania programu przez `new`, zwalniać ją przez `delete` i unikać wycieków, wiszących wskaźników oraz podwójnych zwolnień, które towarzyszą ręcznemu zarządzaniu stertą.
- Inteligentne wskaźnikiInteligentne wskaźniki są właścicielami pamięci na stercie i zwalniają ją automatycznie. Poznaj `unique_ptr`, `shared_ptr`, `make_unique` i `make_shared` oraz dowiedz się, dlaczego prawie nigdy nie musisz już pisać `new`/`delete`.
Strings & I/O
- NapisyJak używać `std::string` w C++: bezpieczne budowanie, łączenie, przeszukiwanie i wycinanie tekstu oraz dlaczego do prawdziwej pracy prawie nigdy nie chcesz surowego `char*`.
- Wejście i wyjścieJak działa wejście i wyjście konsoli w C++: wypisywanie przez cout, wczytywanie przez cin, klasyczny błąd ze znakiem nowej linii przy getline po cin i odzyskiwanie po błędnych danych.
- std::getlineJak std::getline wczytuje całą linię do std::string: użycie z cin, dlaczego zwraca pusty napis po cin >>, poprawki przez cin.ignore i std::ws, własne separatory i czytanie pliku linia po linii aż do końca.
- Strumienie napisówJak używać std::stringstream, istringstream i ostringstream do parsowania tekstu, dzielenia napisów po białych znakach, konwersji między napisami a liczbami i budowania sformatowanych napisów w pamięci.
STL Containers
- TabliceSurowe tablice w C++: jak je deklarować i inicjalizować, bezpiecznie indeksować, przechodzić pętlą z użyciem rozmiaru, pułapka rozpadu tablicy do wskaźnika i dlaczego std::array oraz vector zwykle wygrywają.
- vectorstd::vector to tablica o zmiennym rozmiarze w C++ i kontener, po który warto sięgać domyślnie. Dowiedz się, jak tworzyć vector, odczytywać elementy, powiększać go i przechodzić po nim pętlą, a także poznaj pułapki unieważniania iteratorów i wychodzenia poza zakres.
- mapstd::map w C++ wyjaśniony: posortowany kontener klucz-wartość z wyszukiwaniem w czasie logarytmicznym. Wstawianie, wyszukiwanie, iteracja i klasyczna pułapka operator[], który po cichu wstawia klucze.
- unordered_mapPoznaj std::unordered_map w C++, oparte na tablicy mieszającej rodzeństwo map, które daje średnio O(1) przy wstawianiu i wyszukiwaniu. Omawiamy podstawowe operacje, pułapkę automatycznego wstawiania przez [], count kontra find oraz to, kiedy wybrać je zamiast uporządkowanej mapy.
- setJak std::set przechowuje w C++ unikalne, automatycznie posortowane wartości: wstawianie, sprawdzanie przynależności przez count i find, iteracja w kolejności oraz różnice między set, multiset i unordered_set.
- pair i tupleJak `std::pair` i `std::tuple` łączą dwie lub więcej wartości w jeden obiekt: tworzenie, dostęp do pól, structured bindings i to, gdzie każdy z nich pasuje.
- IteratoryJak działają iteratory w C++, czyli uogólnione wskaźniki do kontenerów: begin() i end(), dereferencja, przesuwanie, wersje const i odwrotne oraz pułapki unieważnienia i dereferencji end(), które prowadzą do niezdefiniowanego zachowania.
STL Algorithms & Templates
- AlgorytmyUżywaj standardowych algorytmów C++, takich jak `find`, `count_if`, `transform`, `accumulate` i `remove`, aby przetwarzać zakresy bez ręcznie pisanych pętli. Do tego pułapki par iteratorów i idiomu erase-remove.
- SortowanieSortuj wektory i tablice w C++ przez `std::sort`: kolejność domyślna, własne komparatory, sortowanie struktur według pola i pułapka ścisłego porządku słabego, która powoduje awarie.
- SzablonyNapisz kod raz i używaj go z każdym typem dzięki szablonom w C++: szablony funkcji, szablony klas, dedukcja typów i mylące błędy kompilatora, które potrafią powodować.
Classes & Objects
- KlasyJak klasy w C++ łączą dane i zachowanie w typy wielokrotnego użytku: deklarowanie pól i metod, tworzenie obiektów, podział na public i private oraz pułapki, takie jak niezainicjalizowane pola i wskaźnik this.
- KonstruktoryKonstruktor to specjalna metoda, która uruchamia się przy tworzeniu obiektu. Poznaj konstruktory domyślne, parametryczne i kopiujące, listy inicjalizacyjne oraz sposoby na to, by obiekty nie zostawały zainicjalizowane w połowie.
- DestruktoryDestruktor uruchamia się automatycznie, gdy obiekt jest niszczony. Poznaj składnię `~ClassName()`, moment jego wywołania, powód, dla którego zwalnia zasoby, oraz regułę trzech/pięciu.
- DziedziczenieJak dziedziczenie w C++ pozwala klasie pochodnej wykorzystać i rozszerzyć klasę bazową: składnia, dziedziczenie public a private, kolejność konstruktorów i destruktorów oraz pułapki takie jak object slicing.
- Funkcje wirtualneFunkcje wirtualne pozwalają wskaźnikowi na klasę bazową wywołać w czasie działania programu wersję metody z klasy pochodnej. Poznaj `virtual`, `override`, klasy abstrakcyjne i dowiedz się, dlaczego destruktor klasy bazowej musi być wirtualny.
- Przeciążanie operatorówPrzeciążanie operatorów w C++ pozwala twoim typom działać z wbudowanymi operatorami takimi jak +, == i <<. Poznaj zasady wyboru między składową a funkcją spoza klasy, przeciążanie porównań i operatorów strumienia oraz pułapki związane z typem zwracanym i operatorem przypisania.
- Specyfikatory dostępuJak public, private i protected decydują w C++, kto może dotykać składowych klasy: fundament enkapsulacji, z getterami, setterami i furtką w postaci friend.
- StrukturyStruktury w C++ w praktyce: jak połączyć powiązane zmienne w jeden typ, deklarować i inicjalizować obiekty struct, dodać do struktury funkcje składowe i konstruktory oraz czym struct naprawdę różni się od class.
- EnumyTypy wyliczeniowe w C++: jak je deklarować, dlaczego enum class z zasięgiem jest bezpieczniejszy niż zwykły enum, własne wartości, switch na enumeratorach i konwersja do i z liczb całkowitych.
Errors & Debugging
- WyjątkiWyjątki zgłaszają błędy, których funkcja nie potrafi obsłużyć lokalnie. Dowiedz się, jak używać `throw`, jakie są standardowe typy wyjątków, czym jest komunikat `what()` i dlaczego przy poważnych błędach wyjątki wygrywają z kodami powrotu.
- try-catchRyzykowny kod umieść w `try`, a reaguj w `catch`. Dowiedz się, jak łapać wyjątki przez referencję do const, ustawiać kolejność wielu bloków, używać `catch (...)` i rzucać wyjątek ponownie bez wycieków zasobów.
- Niezdefiniowane zachowanieNiezdefiniowane zachowanie (undefined behavior, UB) to kod, dla którego standard C++ nie ustala żadnych reguł: może się wysypać, uszkodzić dane albo pozornie działać. Poznaj najczęstsze przyczyny, dowiedz się, dlaczego "u mnie działało" niczego nie dowodzi, i poznaj narzędzia, które wyłapują UB.