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 Both sides next revision
courses:b6b36pjc:ukoly:jednohubky [2018/12/01 15:34]
horenmar Autoupdate to version 9644b8b
courses:b6b36pjc:ukoly:jednohubky [2018/12/06 23:10]
horenmar Autoupdate to version 62486f0
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