Jak alokować na stercie, a jak na stosie? Jak wyjątki przyspieszają kod? Użyć wskaźników zwykłych, czy tych sprytniejszych? A może cieknie Ci pamięć? Oto kompendium wiedzy dla tych, którzy chcą się nazywać prawdziwymi programistami C++.
Zwięźle, praktycznie, nowocześnie. Coś dla osób początkujących. Nie jest to szkolenie od zera. Mile widziane wcześniejsze próby oswojenia C++. Dobry wstęp do naszych pozostałych szkoleń.
Najbardziej praktyczny kurs z narzędzi programistycznych i devopsowych. Poznaj narzędzia programisty niezbędne nie tylko w programowaniu w C++.
Najbardziej merytoryczny kurs STL-a po polsku. Naucz się pisać idiomatyczny kod bez pętli w C++20.
Polimorficzny wirtualny destruktor? Kompozycja czy agregacja? Zasady SOLID? Można prościej? U nas tak! Naucz się pisać testowalny kod w paradygmacie obiektowym i projektuj swoje klasy zgodnie ze sztuką.
Standardy C++11, C++14, C++17, C++20, a nawet C++23. Dowiedz się jak pisze się nowoczesny kod. Ten kurs uświadomi Ci, jak dużo materiałów w internecie jest przestarzałych i jak wiele rzeczy można zrobić prościej z użyciem nowych standardów.
Cena docelowa: 699 zł
Najbardziej mroczna część C++, której boją się nawet seniorzy. Opanuj metaprogramowanie, poznaj szablony funkcji, klas, zmiennych i aliasów. Opanuj szablony wariadyczne i pisz generyczny, a jednocześnie optymalny kod,
Cena docelowa: 649 zł
Nie jestem testerem, po co mam pisać testy?! Po to, żeby nie tracić tygodni na poprawianie błędów matole! Testy jednostkowe to obowiązek każdego programisty. Nauczymy Cię GTesta, Catch2 i TDD. To szkolenie całkowicie zmieni Twój sposób pisania kodu.
Cena docelowa: 599 zł
Umiesz pisać programy, ale czujesz, że Twój kod śmierdzi? Brakuje mu tego czegoś? Wygląda jak przez okno? Naucz się nazywać zmienne, formatować kod i stosować ogólnie przyjęte konwencje. Twój kod będzie się czytało jak wciągający kryminał.
Cena docelowa: 299 zł
Gang of Four brzmi jak nowojorska grupa przestępcza? Idiomy to coś dla idiotów? Odczarujemy je. Nauczymy Cię popularnych wzorców - Dekoratorów, Fasad, Fabryk, Obserwatorów, Strategii oraz C++'owych idiomów - RAII, SFINAE, PIMPL, SOO i innych.
Opanuj mroczne arkana programowania współbieżnego i przyspiesz swoje programy. Używaj wątków, muteksów, zadań asynchronicznych. Unikaj zakleszczeń, wywłaszczeń, walki o zasoby i... gry w ping ponga z pamięcią cache.
Dowiedz się, jak zdobyć pierwszą pracę bez doświadczenia w branży. Odpicuj swoje CV i profil na LinkedIn. Wpisz odpowiednie projekty, dowiedz się z czego się przygotować, gdzie szukać pracy i o co zapytać przyszłego pracodawcę.
Cena docelowa: 249 zł
// Complicated types are not readable - avoid them
std::vector> compressGrayscale(std::array, height>&);
std::array, height> decompressGrayscale(std::vector>&);
// Domain names are much better
CompressedImage compressGrayscale(const Image& bitmap);
Image decompressGrayscale(const CompressedImage& compression);
// Create aliases to achieve it
using Image = std::array, height>;
using CompressedImage = std::vector>;
// Always initialize your data
int index = 0; // ok
bool completed; // bad
bool finished = false; // ok
if (completed) { // very bad
// ...
}
struct Node {
Node* next = nullptr; // ok
int value = 0;
}
// Create code formatting rules and guides, use .clang-format
class SuperWarrior {
public:
SuperWarrior(int level, int strength, int dexterity)
: level_(level)
, strength_(strength)
, dexterity(dexterity)
{
if (level_ >= 10) {
mana_ = 50;
}
}
private:
int level_ = 1;
int strength_ = 50;
int dexterity_ = 10;
int mana_ = 0;
};
void foo()
{
double x[1'048'576];
x[0] = 10;
}
int main()
{
foo();
return 0;
// What happens here?
}
#include
#include
#include
int main() {
std::string x = "x";
std::async(std::launch::async, [&x]() {
x = "y";
});
std::async(std::launch::async, [&x]() {
x = "z";
});
std::cout << x;
// Why the value of x is always "z"?
}
#include
#include
#include
#include
#include "catch_amalgamated.hpp"
#include
#include
#include
SCENARIO("Testing sort with a custom comparator", "[vector][sort][greater]") {
GIVEN("vector v") {
auto v = GENERATE(std::vector{1, 2, 3},
std::vector{1, 3, 2},
std::vector{2, 1, 3},
std::vector{2, 3, 1},
std::vector{3, 1, 2},
std::vector{3, 2, 1});
WHEN("sort is called with std::ranges::greater functor") {
std::ranges::sort(v, std::ranges::greater{});
THEN("v is {3, 2, 1}") {
std::vector expected = {3, 2, 1};
REQUIRE(v == expected);
}
}
}
}
SCENARIO("Testing sort algorithm on string", "[string][sort]") {
GIVEN("A simple string s = textTEXT") {
std::string s = "textTEXT";
WHEN("The string is sorted") {
std::ranges::sort(s);
THEN("The result is ETTXettx") {
REQUIRE(s == "ETTXettx");
}
}
}
}
Tyle brutto kosztował 1 dzień mojego szkolenia firmowego z C++ w 2021 roku. Zawartość powyższych kursów to od 2 do 10 takich dni.
Tyle ludzie płacą za ROCZNY dostęp do grup i społeczności eksperckich, takich jak nasz serwer Discord. A u nas taki dostęp masz za darmo, gdy kupisz dowolny kurs 😍
Tyle kosztowały 3 godziny szkolenia grupowego ze mną za jedną osobę, gdy zaczynałem w 2018 roku.
Kup nasze kursy C++, dołącz do społeczności na Discordzie, ucz się wpólnie z innymi! Oglądaj wideo, rozwiązuj zadania, zdobywaj punkty, pomagaj innym, pytaj o pracodawców i ciekawe projekty.
Zostaw swój email i zapisz się na newsletter. Dostaniesz dostęp do kilkunastu darmowych lekcji z różnych modułów.