Paweł Rzechonek

Zainteresowania zawodowe: programowanie (C++, Java, C#, F#), technologie webowe, szeroko rozumiana algorytmika, metematyka klasyczna.

C++
język programowania

data ostatniej modyfikacji dokumentu

Data ostatniej modyfikacji tego dokumentu (cpp.phtml) to poniedziałek 22 kwietnia 2024 roku (o godzinie 16:18).

ogłoszenia
18 marca 2024 r.
wykład w trakcie godzin rektorskich:
Dzisiejszy wykład nie odbył się z powodu godzin rektorskich. Niemniej jednak załączam notatki do tego wykładu i wystawiam kolejne zadanie dotyczące kopiowania i przenoszenia. Wrócę do tematu kopiowania i przenoszenia obiektów w C++ w przyszłym tygodniu.

4 marca 2024 r.
odwołany wykład:
Dzisiejszy wykład został odwołany - nieprzewidziany incydent zatrzymał wykładowcę w domu. Wykład zostanie przeprowadzony w innym dogodnym i uzgodnionym terminie.

19 lutego 2024 r.
pierwsze laboratoria:
Pierwsze zajęcia laboratoryjne odbędą się w przyszłym tygodniu 26-29 lutego 2024.

19 lutego 2024 r.
punkt informacyjny:
W tym miejscu będą się pojawiać ważne ogłoszenia dotyczące organizacji wszystkich zajęć związanych z tym przedmiotem. Proszę czytać te ogłosznia na bieżąco.
terminarz
wykład:
poniedziałek 14-16 (Paweł Rzechonek)

laboratoria:
poniedziałek 12-14, s.110 (Łukasz Piwowar)
wtorek 16-18, s.110 (Łukasz Piwowar)
wtorek 18-20, s.137 (Paweł Rzechonek)
środa 16-18, s.7 (Andrzej Łukaszewski)
czwartek 18-20, s.110 (Paweł Rzechonek)
licznik wejść na stronę

1 dzisiaj
10 w obecnym miesiącu
817 w bieżącym roku
817 od powstania strony

polecane artykuły

o przedmiocie

Kurs programowania w C++

C++ to obiektowo zorientowany język programowania. Został on zaprojektowany przez Bjarne'a Stroustrupa z myślą o programowaniu systemowym oraz do zaawansowanych obliczeń inżynierskich. Świadome używanie C++ do rozwiązywania problemów algorytmicznych daje dużo satysfakcji doświadczonym programistom, zwłaszcza dlatego, że generowany przez kompilator kod jest bardzo efektywny.

Celem kursu jest zapoznanie studentów z bogatą składnią języka C++, różnorodnymi technikami stosowanymi w programowaniu w C++ oraz z obszernymi fragmentami biblioteki STL.

Wymagane przygotowanie
  •   Umiejętność programowania strukturalnego i proceduralnego w języku C/C++.
  •   Umiejętność czytania dokumentacji technicznej w języku angielskim.
  •   Podstawowa znajomość algorytmiki.
Cel kursu
  •   Nauka programowania obiektowego w języku C++.
  •   Poznanie wybranych fragmentów biblioteki STL.

literatura

Literatura podstawowa
  •   B.Stroustrup: Język C++. Kompendium wiedzy. Wydanie 4. Wydawnictwo Helion, Gliwice 2014.
  •   J.Grębosz: Opus magnum C++. Programowanie w języku C++11. Wydanie 2 poprawione. Tom 1, 2, 3. Wydawnictwo Helion, Gliwice 2020.
  •   J.Grębosz: Opus magnum C++. Misja w nadprzestrzeń C++14/17. Tom 4. Wydawnictwo Helion, Gliwice 2020.
Literatura uzupełniająca
  •   S.Meyers: Skuteczny nowoczesny C++. Wydawnictwo Helion, Gliwice 2020.
  •   S.Rao: C++. Dla każdego. Wydanie 7. Wydawnictwo Helion, Gliwice 2014.
  •   S.Prata: Język C++. Szkoła programowania. Wydanie 6. Wydawnictwo Helion, Gliwice 2012.
  •   A.Allain: C++. Przewodnik dla początkujących. Wydawnictwo Helion, Gliwice 2014.
  •   N.M.Josuttis: C++. Biblioteka standardowa. Podręcznik programisty. Wydanie 2. Wydawnictwo Helion, Gliwice 2014.
Literatura elektroniczna

laboratorium

Zasady zaliczenia przedmiotu
Ogólnie:
W semestrze będzie opublikowanych (na tej stronie) kilkanaście prostych zadań do zaprogramowania. Za każde samodzielnie zaprogramowane zadanie i oddane w terminie można będzie dostać do 10 punktów (chociaż zadania będą różnej trudności).
Terminy:
Zadania do zaprogramowania będą ogłaszane w tygodniu poprzedzającym termin ich realizacji. Zadania należy oddawać w wyznaczonym terminie. Spóźnienia nie będą tolerowane, za wyjątkiem uzasadnionych sytuacji życiowych: choroba potwierdzona zwolnieniem lekarskim, wezwanie do Sądu, itp.
Prezentacje:
Programy należy prezentować osobiście w czasie pracowni (proszę nie wysyłać programów pocztą elektroniczną, ani nie przekazywać ich poprzez innych studentów). W trakcie prezentacji programu trzeba się liczyć z pytamiami dotyczącymi zadania: metoda rozwiązania, zastosowane konstrukcje językowe, wykorzystane technologie, itp.
Rozwiązania:
Kody źródłowe własnych programów należy zapisywać na SKOS, ponieważ tylko wtedy rozwiązania zadań będą podlegały weryfikacji autorskiej i ocenie.
Oceny:
Aby zaliczyć laboratorium na ocenę dostateczną trzeba do końca semestru zdobyć 50% z wszystkich możliwych do uzyskania punktów; na ocenę bardzo dobrą trzeba będzie zgromadzić 90% punktów; oceny pośrednie pozostają w liniowej zależności od przedstawionych wymagań granicznych.
Zadania laboratoryjne
  1. trójkąt
  2. liczby rzymskie
  3. rozkład liczb całkowitych na czynniki pierwsze
  4. figury na płaszczyźnie
  5. zmienna z historią zmian wartości
  6. kolejka napisów
  7. wielomiany
  8. kolorowe piksele
  9. wyrażenia arytmetyczne
SKOS

wykłady

26 lutego 2024 r: łagodne wprowadzenie do C++

organizacja zajęć: sprawy organizacyjne

  • pierwsze programy w C++
  • struktura programu w C++
  • zmienne ustalone const
  • wyrażenia stałe constexpr
  • referencje i referencje do stałych
  • wskaźnik pusty nullptr
  • typy całkowite int8_t, int16_t, int32_t i int64_t
  • ułożenie obiektów w pamięci i operator alignof
  • typy znakowe char16_t i char32_t
  • łańcuchy znakowe string
  • używanie łańcuchów znakowych zamiast napisów w stylu C
  • wektory vector<T>
  • używanie wektorów zamiast tablic
  • pary pair<K, V>
  • inicjalizacja tablic i kolekcji za pomocą listy wartości
  • przeglądanie tablic i kolekcji za pomocą pętli zakresowej for-each
  • standardowe wejście cin, wyjście cout oraz wyjście dla błędów cerr i clog
  • zgłaszanie błędów za pomocą rzucania wyjątków standardowych instrukcją throw
  • listy wartości initalizer_list<>

slajdy: łagodne wprowadzenie do C++

9 marca 2022 r: klasy i obiekty, ukrywanie implementacji

  • I paradygmat OOP - abstrakcja (grupowanie danych i procedur)
  • klasy - typy danych
  • obiekty - instancje określonej klasy
  • stan obiektu
  • funkcjonalność klasy
  • definicja klasy class
  • składowe w klasie - pola i metody
  • odwołania do składowych za pomocą operatorów . (kropka) i -> (strzałka)
  • tworzenie nowych obiektów na stosie i na stercie za pomocą operatora new
  • inicjalizacja obiektu za pomocą konstruktora
  • konstruktory delegatowe
  • inicjalizacja składowych w obiekcie przed uruchomieniem konstruktora
  • lista inicjalizacyjna do sparametryzowanej inicjalizacji pól składowych w obiekcie
  • usuwanie niepotrzebnych obiektów ze stosu i ze sterty za pomocą operatora delete
  • likwidacja obiektu z udziałem destruktora
  • automatyczne uruchomienie destruktora przed likwidacją obiektu
  • wskaźnik this i jego wykorzystanie w metodach instancyjnych
  • kompozycja - budowanie klasy za pomocą wypełniania obiektami innych klas
  • II paradygmat OOP - hermetyzacja (ukrywanie implementacji)
  • udostępnianie bezpiecznych narzędzi do manipulowania ukrytym stanem obiektu i
  • ukrywanie składowych w sekcji private
  • upublicznianie składowych w sekcji public
  • przeciążanie funkcji i konstruktorów
  • konstruktor domyślny wygenerowany przez kompilator
  • wymuszenie wygenerowania konstruktora domyślnego za pomocą frazy =default
  • stałe pola w klasie
  • inicjalizacja pól stałych w obiekcie za pomocą listy inicjalizacyjnej
  • upublicznianie stałych pól w klasie
  • stałe funkcje składowe do operowania na stałych obiektach

slajdy: cpp2klasy.pdf

16/23 marca 2022 r: składowe statyczne, inicjalizacja, kopiowanie, przenoszenie

  • składowe statyczne w klasie deklarowane za pomocą static
  • odwołania do składowych statycznych
  • inicjalizacja pól statycznych
  • funkcje wbudowane
  • argumenty domyślne w funkcjach
  • inicjalizacja typów podstawowych
  • jednolita inicjalizacja
  • inicjalizacja listą wartości initialization_list<>
  • l-wartości i r-wartości
  • obiekty tymczasowe
  • argumenty tymczasowe w funkcjach
  • semantyka przenoszenia
  • konstruktor kopiujący i przenoszący
  • przypisanie kopiujące i przenoszące

slajdy: kopiowanie i przenoszenie

przykładowy program: napis.hpp napis.cpp test_napis.cpp

8 kwietnia 2024 r: przeciążanie operatorów

  • funkcje i klasy zaprzyjaźnione
  • przeciążanie operatorów
  • operatory składowe kontra zaprzyjaźnione
  • operatory zwiększania ++ i zmniejszania --
  • przypisanie kopiujące i przenoszące =
  • operator wywołania funkcji ()
  • operator indeksowania []
  • operator dostępu do składowych ->
  • statyczne operatory składowe new i delete
  • zaprzyjaźnione operatory czytania z i pisania do strumienia >> i <<

slajdy: operatory

15 kwietnia 2024 r: dziedziczenie

  • III paradygmat OOP - dziedziczenie (specjalizacja klasy)
  • dziedziczenie - budowanie klasy za pomocą rozbudowywania istniejącej klasy
  • porównanie dziedziczenia i kompozycji
  • dokładanie nowych składowych w trakcie dziedziczenia
  • lista pochodzenia
  • dostęp do odziedziczonych składników
  • przywracanie pierwotnej widoczności odziedziczonych składników za pomocą deklaracji using
  • projektowanie hierarchii klas
  • blokowanie dziedziczenia za pomocą deklaratora final
  • dziedziczenie wielobazowe
  • dziedziczenie wirtualne
  • konwersje standardowe dla wskaźników i referencji przy dziedziczeniu
  • inicjalizacja i destrukcja obiektów w warunkach dziedziczenia
  • przenoszenie konstruktorów z klasy bazowej za pomocą deklaracji using
  • inicjalizacja pól składowych w definicji klasy

slajdy: dziedziczenie

22 kwietnia 2024 r: polimorfizm

  • IV paradygmat OOP - polimorfizm (wydobycie adekwatnej dla obiektu funkcjonalności)
  • składowe funkcje wirtualne
  • nadpisywanie funkcji wirtualnych
  • wywołania polimorficzne za pomocą wskaźników i referencji
  • implementacja wywołań polimorficznych
  • wczesne i późne wiązanie
  • wirtualne destruktory
  • klasy abstrakcyjne
  • fabrykowanie obiektów

slajdy: polimorfizm

29 kwietnia 2024 r: przestrzenie nazw

29 kwietnia 2024 r: wyjątki

For Erasmus Students

Tutorials
  1. C++ Language (www.cplusplus.com)
  2. C++ Tutorial (www.javatpoint.com)
  3. C++ Tutorial (www.tutorialspoint.com)
  4. C++ reference (en.cppreference.com)
Exercises
  1. Roman numbers
  2. Decomposition of integers into prime factors [pl]
  3. Figures on the plane
  4. Variable with change history [pl]
  5. Queue containing strings
  6. Polynomials
  7. Colorful pixels [pl]
  8. Expression trees