o przedmiocie
                    Kurs programowania w C++
                    
                        C++ to obiektowo zorientowany język programowania.
                        Został on zaprojektowany przez Bjerna 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++.
 
                        -   Podstawowa znajomość algorytmiki.
 
                        -   Umiejętność czytania dokumentacji technicznej w języku angielskim.
 
                    
                    Cel kursu
                    
                        -   Nauka programowania obiektowego w języku C++.
 
                        -   Poznanie obszernych fragmentów biblioteki STL.
 
                    
					literatura
                    Literatura podstawowa
                    
                        -   J.Grębosz: Opus magnum C++11. Programowanie w języku C++. Tom 1, 2, 3. Wydawnictwo Helion, Gliwice 2018.
 
                        -   B.Stroustrup: Język C++. Kompendium wiedzy. Wydanie 4. Wydawnictwo Helion, Gliwice 2014.
 
                    
                    Literatura uzupełniająca
                    
                        -   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.
 
                        -   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 pozostją w liniowej zależności od przedstawionych
                            wymagań granicznych.
                        
 
                    
                    Zadania laboratoryjne
                    
                        - trójkąty i koła
 
                        - liczby w systemie rzymskim
 
                        - figury na płaszczyźnie
 
                        - kolejka zbudowana na tablicy
 
                        - wielomiany
 
                        - wyrażenia arytmetyczne
 
                        - liczby wymierne
 
                        - drzewa BST
 
                        - manipulatory
 
                        - kalkulator ONP
 
                    
                    Ranking
                    
                    Skos
                    
					wykłady
                    5 marca 2019 r: łagodne wprowadzenie do C++
                    
                        organizacja zajęć: cpp0organizacja.pdf
                        
                            - pierwsze programy w C++
 
                            - struktura programu w C++
 
                            - zmienne ustalone const
 
                            - wyrażenia stałe constexpr
 
                            - zmienne ulotne volatile
 
                            - referencje i referencje do stałych
 
                            - typ void i void*
 
                            - 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
 
                            - pary pair<K, V>
 
                            - wektory vector<T>
 
                            - używanie wektorów zamiast tablic
 
                            - 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: cpp1wstep.pdf
                     
                    5 marca 2019 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
                     
                    19 marca 2019 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: cpp3kopiowanie.pdf
                     
                    26 marca 2019 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: cpp4operatory.pdf
                     
                    2 kwietnia 2019 r: dziedziczenie
                    
                        
                            - III paradygmat OOP - dziedziczenie (specjalizacja klasy)
 
                            - 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
 
                            - konstruktory delegatowe
 
                            - 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
 
                            - dziedziczenie - budowanie klasy za pomocą rozbudowywania istniejącej klasy
 
                            - porównanie dziedziczenia i kompozycji
 
                        
                        slajdy: cpp5dziedziczenie.pdf
                     
  
                    9 kwietnia 2019 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: cpp6polimorfizm.pdf
                     
  
                    9 kwietnia 2019 r: przestrzenie nazw
                    
                        
                            - przestrzenie nazw jako struktury grupujące definicje
 
                            - przestrzenie nazw jako struktury otwarte
 
                            - deklaracja użycia i dyrektywa użycia
 
                            - przestrzeń anonimowa
 
                            - komponowanie i wybór w przestrzeniach nazw
 
                            - standardowa przestrzeń nazw
 
                            - klasy zagnieżdżone
 
                        
                        slajdy: cpp7przestrzenie.pdf
                     
  
                    16 kwietnia 2019 r: wyjątki
                    
                        
                            - zastosowanie wyjątków do sygnalizowania błędów
 
                            - zgłaszanie wyjątków instrukcją throw
 
                            - łapanie wyjątków w instrukcji try-catch
 
                            - przepływ sterowania przy zgłoszeniu wyjątku
 
                            - funkcje call-back’owe 
 
                            - rozróżniane wyjątków po typie
 
                            - grupowanie wyjątków w hierarchie klas
 
                            - dopasowywanie wyjątków
 
                            - złapanie każdego wyjątku w bloku catch(...)
 
                            - odwikłanie stosu po zgłoszeniu wyjątku
 
                            - implementacja mechanizmu zgłaszania i łapania wyjątków
 
                            - wyjątki w konstruktorach i w destruktorach
 
                            - RAII czyli zdobywanie zasobów poprzez inicjalizację
 
                            - wsparcie techniki RAII przez shared_ptr
 
                            - specyfikacja wyjątków zgłaszanych przez funkcje
 
                            - wyjątek bad_alloc zgłaszany przez operator new
 
                            - klasa exception i wyjątki z biblioteki standardowej
 
                            - definiowanie własnych wyjątków
 
                            - asercje
 
                        
                        slajdy: cpp8wyjatki.pdf
                     
  
                    7 maja 2019 r: szablony
                    
                        
                            - definicja szablonu
 
                            - funkcje i klasy szablonowe
 
                            - przeciążanie szablonów funkcji
 
                            - trejty czyli specyfikowanie strategii za pomocą parametrów szablonu
 
                            - parametry domyślne w szablonach
 
                            - specjalizacja szblonów
 
                            - klasy szablonowe
 
                            - składowe statyczne w szablonach
 
                            - przyjaźń a szablony
 
                            - dziedziczenie w przypadku szablonów
 
                        
                        slajdy: cpp9szablony.pdf
                     
  
                    14 maja 2019 r: konwersje
                    
                        
                            - konwersje tradycyjne dla typów podstawowych
 
                            - konstruktory konwertujące i notacja konstruktorowa
 
                            - blokowanie konwersji za pomocą explicit
 
                            - operatory konwersji w klasie
 
                            - szablonowe operatory konwersji
 
                            - statyczna konwersja typów danych przy użyciu operatorów konwertujących za pomocą static\_cast<>
 
                            - zmiana deklaratorów const i volatile za pomocą const\_cast<>
 
                            - zmiana interpretacji typu danych za pomocą reinterpret\_cast<>
 
                            - dynamiczna konwersja wskaźników i referencji to klas polimorficznych za pomocą dynamic\_cast<>
 
                            - RTTI - informacja o typie danych
 
                            - automatyczne określanie typu - deklaracja auto
 
                            - wydobycie typu wyrażenia za pomocą decltype
 
                        
                        slajdy: cppAkonwersje.pdf
                     
                    21 maja 2019 r: podstawowe narzędzia
                    
                        
                            - pary i tuple
 
                            - wyznaczanie minimum i maksimum w tablicy
 
                            - dodatkowe operatory porównujące w przestrzeni nazw std::rel\_ops
 
                            - limity typów numerycznych
 
                            - liczby zespolone
 
                        
                        slajdy: cppBnarzedzia.pdf
                     
                    21 maja 2019 r: strumienie
                    
                        
                            - pojęcie strumienia jako obiektu transportującego dane
 
                            - strumienie konsolowe cin, cout, clog i cerr
 
                            - hierarchia klas strumieni w bibliotece standardowej
 
                            - formatowane operacje na strumieniach za pomocą operatorów << i >>
 
                            - przeciążanie operatorów strumieniowych << i >>
 
                            - sterowanie formatem strumienia - flaga fmtflags
 
                            - manipulatory z biblioteki standardowej
 
                            - definiowanie własnych manipulatorów
 
                            - nieformatowane operacje czytania i pisania na strumieniach
 
                            - błędy w strumieniu - flaga io_state
 
                            - zgłaszanie wyjątków przez strumień
 
                            - strumienie związane z plikami
 
                            - strumienie związane z łańcuchami znakowymi
 
                            - synchronizacja strumieni
 
                            - bufory strumieniowe
 
                        
                        slajdy: cppCstrumienie.pdf
                     
  
                    
                    
					For Erasmus Students
                    Tutorials
                    
                        - C++ Language (www.cplusplus.com)
 
                        - C++ Tutorial (www.javatpoint.com)
 
                        - C++ Tutorial (www.tutorialspoint.com)
 
                        - C++ reference (en.cppreference.com)
 
                    
                    Exercises
                    
                        - Roman numerals
 
                        - Simple geometric figures
 
                        - Polynomials
 
                        - Expression trees