pridani poznamek s conteinery, restrukturalizace, oprava kodu

pridani poznamek ke containerum zatim pouze s vectory
poznamky z hodim maji ted vlastni podslozku
lehka oprava kodu vsede mozne, hlavne pridani cpp pro lepsi cteni a
oprava drobnych chybek
This commit is contained in:
2026-03-06 15:30:21 +01:00
parent c2bedb027e
commit 56b536368b
3 changed files with 214 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
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

View File

@@ -0,0 +1,53 @@
- 26. 2 - čtvrtek 11:00
- dnes: třídy a objekty, public/protected/private, constructor/destructor
# Konstruktory
- můžu přetěžovat, ale **POZOR**:
```
TridaA(void) //constructor pro inicializaci promenne
{
this->a = 0;
this->b = 0;
this->c = 0;
std::cout << "Byl zavolan konstruktor bez arg." << std::endl;
}
TridaA(int a) //inicializace z argumentu constructoru
{
this->a = a;
this->b = 0;
this->c = 0;
std::cout << "Byl zavolan konstruktor s arg." << std::endl;
}
TridaA(int a, int b = 42, int c = 64)
{
this->a = a;
this->b = b;
this->c = c;
}
```
Chyby kompilatoru:
```
main.cpp: In function int main():
main.cpp:44:16: error: call of overloaded TridaA(int) is ambiguous
44 | TridaA obj1(1); //inicializujeme objekt
| ^
main.cpp:44:16: note: there are 4 candidates
main.cpp:31:5: note: candidate 1: TridaA::TridaA(int, int, int)
31 | TridaA(int a, int b = 42, int c = 64)
| ^~~~~~
main.cpp:23:5: note: candidate 2: TridaA::TridaA(int)
23 | TridaA(int a) //inicializace z argumentu constructoru
| ^~~~~~
main.cpp:3:7: note: candidate 3: constexpr TridaA::TridaA(const TridaA&)
3 | class TridaA
| ^~~~~~
main.cpp:3:7: note: candidate 4: constexpr TridaA::TridaA(TridaA&&)
```
- **MUSÍ TO BÝT JEDNOZNAČNÉ:**