Tentokrát bude úloha/hádanka buď značně triviální, nebo obtížná, a to v závislosti na tom, zda prokouknete trik, který bude třeba využít ;).
Zadání
Definujte funkci/šablonu funkce f podle C++98, které když se předá argument typu int, tak jej vytiskne na standardní výstup, a když se zavolá bez argumentů, tak vytiskne pseudo-náhodné číslo pomocí standardní funkce rand(). Můžete použít libovolné funkce/šablony/makra ze standardní knihovny. Kromě příslušných #include a definice funkce/šablony funkce f nic nedefinujte. Definice musí být přenositelná a nesmí se spoléhat na nespecifikované či nedefinované chování.
Ukázka:
#include <iostream> #include <cstdlib> // Definice f // ... int main() { // Zde může být případné volání srand(), ale není to nutné // ... f(); // Vytiskne pseudo-náhodné číslo f(15); // Vytiskne 15 f(); // Vytiskne pseudo-náhodné číslo f(-456); // Vytiskne -456 }
"Vítězí" nejjednodušší řešení ;).
Řešení
Řešení je jednoduché:
void f(int n = std::rand()) { std::cout << n << std::endl; }
Bylo třeba si uvědomit, že implicitní hodnota parametru může být i výsledek volání funkce (psal jsem o tom zde). Ondrova odpověď byla správná.
Řešení?
Ale asi jsem nepochopil zadání ...
Re: Řešení?
Díky za odpověď. Cílem je to všechno nacpat do jediné funkce/šablony
f(takhle to jsou dvě různé funkcef). Takže až tak jednoduché to nebude ;).ad
posilam diff k Liborovu reseni:
4,10c4 < // Definice f < // ... < void f() { < std::cout << rand() << std::endl; < } < < void f(int param) { --- > void f(int param = rand()) {Re: ad
Díky za odpověď. Takto je to správně ;).