Lista Inicjalizacyjna Składowych 2/2

W pierwszej części tego artykułu przedstawiłem podstawowe informacje dotyczące list inicjalizacyjnych składowych (ang. member initializer list). Są one wspólne dla wszystkich standardów języka C++, a więc także przed standardem C++11. W drugiej części omówię pewne cechy języka C++ związane z tematem list inicjalizacyjnych, które pojawiły się wraz z nowszymi standardami (poczynając od standardu C++11). Inicjalizacja…

Lista Inicjalizacyjna Składowych 1/2

Celem tego artykułu jest wyjaśnienie najważniejszych aspektów dotyczących listy inicjalizacyjej składowych (ang. member initializer list), przedstawiając przy tym problemy, jakie mogą wystąpić podczas ich implementacji. Nazwy tej listy nie należy mylić z nazwą typu std::initializer_list, który pojawił się w standardzie C++11, przy czym w dalszej części artykułu będę stosował jej skróconą (powszechną) nazwę, czyli ”lista…

Wyświetlanie Adresu Pamięci

Wyświetlanie adresu pamięci (wirtualnej) jest stosunkowo prostym zadaniem, bowiem jest to nic innego jak liczba, której typowy rozmiar wynosi 64-bity (lub 32-bity). Specyfika tej liczby polega jednak na tym, iż jest ona przedstawiana w formacie szesnastkowym (heksadecymalnym). Odwzorowaniem adresu pamięci w języku C++ (tak samo jak w języku C) nie jest jednak typ liczbowy lecz…

Struktura vs Klasa

Klasa (ang. class) stanowi definicję typu danych składającego się z pól (danych składowych) oraz metod (funkcji składowych). Jest to podstawowe pojęcie z zakresu programowania obiektowego. W języku C++ taki nowy typ danych możemy zdefiniować za pomocą słowa kluczowego class lub struct. Może się więc wydawać, że skoro istnieje takie rozróżnienie, musi nieść ze sobą istotne…

Biblioteczne Wyszukiwanie Binarne 2/2

W pierwszej części artykułu przedstawiona została biblioteczna funkcja std::bsearch (plik nagłówkowy cstdlib) realizująca algorytm wyszukiwania binarnego. Jej korzenie sięgają biblioteki standardowej języka C. Ma to swoje konsekwencje w postaci relatywnie skomplikowanego interfejsu oferowanego przez tą funkcję (aż 5 parametrów oraz często pojawiający się typ void * lub const void * wymagający częstych rzutowań). Ponadto zastosowano…

Biblioteczne Wyszukiwanie Binarne 1/2

W tym dwuczęściowym artykule omówimy sobie algorytm wyszukiwania binarnego (ang. binary search). Do tematu podejdziemy jednak bardziej po inżyniersku, bowiem zamiast samodzielnie implementować ten algorytm (bardziej szczegółowe omówienie tego algorytmu wraz z przykładową implementacją stanowi temat na osobny artykuł), przedstawie jak skorzystać z tego co oferuje nam biblioteka języka C++. Algorytm ten, w porównaniu do…

Wirtualny Klon

Zacznijmy od motywującego przykładu, który przedstawi pewien problem: #include <iostream> class Base { public: virtual ~Base() = default; virtual void execute() const { std::cout << „Base::execute()\n”; } }; class Derived : public Base { public: virtual void execute() const override { std::cout << „Derived::execute()\n”; } }; void process(Base *b) { Base *a = new Base(*b);…

Szkoły Programowania

Szkoły programowania zagościły na dobre na rynku edukacyjnym. Spotykam się często z informacją, że w Polsce brakuje około 50 tys. programistów. Misją szkół programowania jest wypełnienie luki powstałej na rynku pracy (mamy bowiem do czynienia z tzw. rynkiem pracownika). Szkoły programowania są atrakcyjną opcją dla osób, które do tej pory z branżą IT miały niewiele…

Funkcje Czysto Wirtualne z Implementacją

Podczas nauki programowania w języku C++, dowiadujemy się m.in. że funkcje czysto wirtualne (ang. pure virtual function) to takie funkcje wirtualne, które nie posiadają implementacji i jako takie służą do modelowania pewnego interfejsu. Klasa zawierająca przynajmniej jedną funkcję czysto wirtualną, staje się klasą abstrakcyjną (ang. abstract class) – nie możemy tworzyć bezpośrednio obiektów tej klasy…

Argumenty Domyślne Wiązane Statycznie

Dane są klasy Base i Derived zdefiniowane jak poniżej: #include <iostream> class Base { public: virtual void printNumber(int n = 7) { std::cout << „Base::printNumber(int): ” << n << '\n’; } }; class Derived : public Base { public: virtual void printNumber(int n = 42) { std::cout << „Derived::printNumber(int): ” << n << '\n’; }…