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:
85
poznamky z hodin/3. týden.md
Normal file
85
poznamky z hodin/3. týden.md
Normal 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
|
||||
53
poznamky z hodin/Cviceni 2.md
Normal file
53
poznamky z hodin/Cviceni 2.md
Normal 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É:**
|
||||
Reference in New Issue
Block a user