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.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
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