Zaawansowane CPP

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania

Forma zajęć

Wykład (30 godzin) + laboratorium (30 godzin)

Opis

Celem przedmiotu jest zapoznanie studentów z zaawansowanymi technikami programowania obiektowego w C++.

Sylabus

Autor

  • Piotr Białas - Uniwersytet Jagielloński, Wydział Fizyki, Astronomii i Informatyki Stosowanej,
  • Wojciech Palacz - Uniwersytet Jagielloński, Wydział Fizyki, Astronomii i Informatyki Stosowanej,

Wymagania wstępne

  • Programowanie Obiektowe
  • Znajomość C++

Zawartość

  • Szablony (templates)
    • programowanie generyczne
      • koncepty (STL)
      • kontenery i algorytmy generyczne
      • klasy cech i wytycznych
    • metaprogramowanie, szablony wyrażeń
    • Inteligentne wskaźniki
    • Funktory
  • Wyjątki.
    • bezpieczna obsługa wyjątków
    • wyjątki a kontenery (STL)
  • Alokacja pamięci
    • operator new, własne alokatory pamięci
    • obsługa błędów przydziału pamięci
    • alokatory w STL
  • Narzędzia programistyczne
    • testowanie (CPPUnit)

Literatura

  • D. Vandervoorde, N. Josuttis "C++ Szablony, Vademecum profesjonalisty", Helion S.A 2003.
  • Alexandrescu "Modern C++ Design, Generic Programming and Design Patterns Applied", 2001 Addison-Wesley.
  • Alexandrescu "Nowoczesne projektowanie".
  • Stroustroup "Jezyk C++".
  • N. Josuttis "STL".
  • B. Eckel, Ch. Allinson, "Thinking in C++" Tom 2 2004 Helion.
  • S. Meyers,"C++, 50 efektywnych sposobów na udoskonalenie Twoich programów", 2003 Helion.
  • S. Meyers, "More effective C++"
  • S. Meyers, "STL w praktyce. 50 sposobów efektywnego wykorzystania", 2004 Helion.
  • Strona SGI http://www.sgi.com/tech/stl/
  • BOOST
  • CRTP
  • "patterns"

(tymczasowe) Uwagi dotyczące latex2mediawiki

Poniższe makra powodują, że kod C++ jest poprawnie tłumaczony:

\newcommand{\beginlstlisting}{
 <nowiki>\disablenowiki }
\newcommand{\beginlstlisting}[1]{
 <nowiki>\disablenowiki }
\newcommand{\endlstlisting}{</nowiki>\enablenowiki

\EATWS }
\newcommand{\cd}[1]{<code><nowiki>\disablenowiki #1</nowiki>\enablenowiki</code>}

\renewcommand{\beginverbatim}{\beginlstlisting }
\renewcommand{\endverbatim}{\endlstlisting }
\renewcommand{\verb}{\renewcommand*{\PIPEREAD}
{<code><nowiki>\disablenowiki\renewcommand*{\PIPEREAD}
{\enablenowiki</nowiki></code>\renewcommand*{\PIPEREAD}
{\begin{nowiki}\PIPE \end{nowiki} }}}}

Moduły

  1. Szablony I (ćwiczenia)
  2. Programowanie uogólnione (ćwiczenia)
  3. Szablony II (ćwiczenia)
  4. Testowanie (ćwiczenia)
  5. Klasy cech (ćwiczenia)
  6. Funkcje typów i inne sztuczki (ćwiczenia)
  7. Klasy wytycznych (ćwiczenia)
  8. Metaprogramowanie (ćwiczenia)
  9. Szablony wyrażeń (ćwiczenia)
  10. Inteligentne wskaźniki (ćwiczenia)
  11. Funktory (ćwiczenia)
  12. Używanie funktorów (ćwiczenia)
  13. Wyjątki (ćwiczenia)
  14. Zarządzanie pamięcią (ćwiczenia)
  15. Wyjątkowo odporny kod (ćwiczenia)