Files
PPC/3. týden.md

86 lines
2.1 KiB
Markdown

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 <exception>`
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
- `<exceptions>`
- `std::exception` - bázová třída
- `virtual what()` - vrací řetězec výjimky
- `terminate()` - ukončí program, když se něco pokazí?
- `<stdexcept>`
- `std::out_of_range`
- nestihl
- nestihl
- `<new>`
- 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