CourseWare Wiki
Switch Term
Winter 2021 / 2022
Winter 2020 / 2021
Winter 2019 / 2020
Winter 2018 / 2019
Older
Search
Log In
b181
courses
b6b36pjc
ukoly
jednohubky
Warning
This page is located in archive. Go to the latest version of this
course pages
.
Differences
This shows you the differences between two versions of the page.
View differences:
Side by Side
Inline
Go
Link to this comparison view
Both sides previous revision
Previous revision
2018/12/14 12:43 jerabma7 Autoupdate to version e84192d92869
2018/12/07 16:59 richta [07 – Simulace kovariantních návratových typů s chytrými ukazately]
2018/12/06 23:10 horenmar Autoupdate to version 62486f0
2018/12/01 15:34 horenmar Autoupdate to version 9644b8b
2018/11/23 00:02 jerabma7 [06 – Nevirtuální a virtuální rozhraní]
2018/11/22 23:08 jerabma7 [06 – Nevirtuální a virtuální rozhraní]
2018/11/22 22:08 jerabma7 Autoupdate to version d0f4c9e86d7a
2018/11/15 01:58 jerabma7 Autoupdate to version 44f70cfccc1e
2018/11/08 16:50 jerabma7 Autoupdate to version 0b23f0baaa4d
2018/11/01 00:28 jerabma7 Autoupdate to version faf17e448dc7
2018/10/31 22:35 jerabma7 Autoupdate to version 66281e766cea
2018/10/25 00:42 jerabma7 Autoupdate to version b12a12a4260e
2018/10/17 23:45 horenmar
2018/10/17 23:43 horenmar
2018/10/09 13:42 jerabma7 Autoupdate to version ca01c9c4fa20
Go
Next revision
Previous revision
2018/12/14 12:43 jerabma7 Autoupdate to version e84192d92869
2018/12/07 16:59 richta [07 – Simulace kovariantních návratových typů s chytrými ukazately]
2018/12/06 23:10 horenmar Autoupdate to version 62486f0
2018/12/01 15:34 horenmar Autoupdate to version 9644b8b
2018/11/23 00:02 jerabma7 [06 – Nevirtuální a virtuální rozhraní]
2018/11/22 23:08 jerabma7 [06 – Nevirtuální a virtuální rozhraní]
2018/11/22 22:08 jerabma7 Autoupdate to version d0f4c9e86d7a
2018/11/15 01:58 jerabma7 Autoupdate to version 44f70cfccc1e
2018/11/08 16:50 jerabma7 Autoupdate to version 0b23f0baaa4d
2018/11/01 00:28 jerabma7 Autoupdate to version faf17e448dc7
2018/10/31 22:35 jerabma7 Autoupdate to version 66281e766cea
2018/10/25 00:42 jerabma7 Autoupdate to version b12a12a4260e
2018/10/17 23:45 horenmar
2018/10/17 23:43 horenmar
2018/10/09 13:42 jerabma7 Autoupdate to version ca01c9c4fa20
Go
Last revision
Both sides next revision
courses:b6b36pjc:ukoly:jednohubky [2018/12/01 15:34]
horenmar
Autoupdate to version 9644b8b
courses:b6b36pjc:ukoly:jednohubky [2018/12/07 16:59]
richta
[07 – Simulace kovariantních návratových typů s chytrými ukazately]
Line 184:
Line 184:
-
==== 07 – Simulace kovariantních návratových typů s chytrými
ukazately
====
+
==== 07 – Simulace kovariantních návratových typů s chytrými
ukazateli
====
Jak jsme si ukazovali na cvičení, v C%%++%% nelze kombinovat kovariantní
Jak jsme si ukazovali na cvičení, v C%%++%% nelze kombinovat kovariantní
-
návratové typy s chytrými
ukazately
, jako je například ''std::unique_ptr''.
+
návratové typy s chytrými
ukazateli
, jako je například ''std::unique_ptr''.
Nicméně, chytrou kombinací nevirtuálního rozhraní, schovávání, virtuálního
Nicméně, chytrou kombinací nevirtuálního rozhraní, schovávání, virtuálního
rozhraní a boilerplate, se dá kovariance simulovat.
rozhraní a boilerplate, se dá kovariance simulovat.
Line 206:
Line 206:
chování potřebujete virtuální polymorfismus. Jinak řečeno, budete muset
chování potřebujete virtuální polymorfismus. Jinak řečeno, budete muset
těch metod implementovat více.
těch metod implementovat více.
+
+
+
==== 08 – Jednoduchá šablonová funkce ====
+
+
V této jednohubce si napíšete jednoduchou šablonovou funkci ''clamp''.
+
Tato funkce se v C%%++%%17 stala součástí standardní knihovny, ale protože
+
v tomto předmětu používáme tento semestr stále ještě C%%++%%14, budeme ji
+
implementovat my.
+
+
Funkce ''clamp'' má dvě přetížení
+
* ''T const& clamp(T const& value, T const& low, T const& high)''
+
* ''T const& clamp(T const& value, T const& low, T const& high, Compare cmp)''
+
+
které vrací ''low'' pokud ''value'' je menší než ''low'', ''high'' pokud
+
''value'' je větší než ''high'' a jinak ''value''. Jinak řečeno, ''value''
+
je omezeno do rozsahu ''[low, high]''. První overload předpokládá, že
+
''T'' je porovnatelné pomocí operátoru ''<'', druhý overload pak bere
+
vhodný komparátor jako 4. argument.
+
+
Projekt s implementací a testy najdete
+
{{:courses:b6b36pjc:ukoly:tiny-08.zip|zde}}.
+
+
Do Brute odevzdejte vaši hlavičku ''tiny-08.hpp''.
+
+
=== Rady ===
+
+
Není potřeba implementovat obě funkce stejně, můžete implementovat jednu
+
voláním druhé. K tomu se vám bude hodit obsah hlavičky
+
[[https://en.cppreference.com/w/cpp/header/functional|functional]].
+
+
=== Další ===
+
+
K této jednohubce vám navíc nabízíme dvě otázky k zamyšlení:
+
* Pokud uživatel předá parametry ve špatném pořadí, může dostat špatný výsledek. Toto se dá opravit, pokud funkci přejmenujeme((A změníme implementaci tak, aby odpovídala novému jménu)). Jaké jméno by to bylo?
+
* ''const int& clamped = clamp(value, 0, 255);'' může vést k chybě. K jaké? Jde to rozumně opravit?
+
courses/b6b36pjc/ukoly/jednohubky.txt
· Last modified: 2018/12/14 12:43 by
jerabma7