s- výjimky - reference - konstantní metody/atributy - přetížené operátory - indexování + volání funkce (oboje jsou operátory) - lambda funkce - cvičení - conteinery: vector, list, mapa - # Výjimky - Pozn: "Častokrát je možná lepší, když ten program spadne, než když se chová špatně." - Řešení neočekávaných chyb - Může se to stát náhodně (např. poškozený/přeplněná paměť) - používá se **try** a **catch** ``` try { # kod kde nastane vyjimka / problem } catch (typ vyjimky) { # kod, ktery se s vyjimkou popasuje } ``` knihovna: `#include ` Pak existuje ještě třetí operátor a to operátor `throw`, který vyvolává výjimku. např `throw "Deleni nulou.\n` -> vyvolá výjimku **Deleni nulou\n** `` ## Ošetření více výjimek ``` catch (typ vyjimky) { # kod, ktery se s vyjimkou popasuje } catch (...) { # univerzalni reseni vyjimek pro vsechno ostatní } ``` ## Typy výjimek - `` - `std::exception` - bázová třída - `virtual what()` - vrací řetězec výjimky - `terminate()` - ukončí program, když se něco pokazí? - `` - `std::out_of_range` - nestihl - nestihl - `` - nestihl - nestihl # Reference - ukazatelé byly označeny komunitou C++ jako nebezpečné např. kvůli nejasné syntaxi - Reference je obdoba konstantního ukazatele - nelze vytvořit prázdnou referenci, je svázána s hodnotou a ne adresou (?) - Pokud možno **pls používat reference** - Reference # Přetížené operátory - stejně jako funkce lze přetížit operátory (protože to jsou vlastně takové funkce) - operátory definované pro dané datové typ nelze přetížit - týká se to hlavně operátorů pro instance tříd - např nelze přetížit: `.` `.*` `::` `?:` `sizeof` ## Přetížení binárních operátorů např: `+, -, *, ..., +=, -=, ...` používá se `@` např: `x @ y` ## Přetížení unárních operátorů ## Přetížení postfixových operátorů # Lambda funkce - existuje něco jako funktor :C - místo funktoru mám lambda funkce - každou lambda funkci můžu přepsat do funktoru # Conteinery ## Vector ## List ## Map