Hledejte v chronologicky řazené databázi studijních materiálů (starší / novější příspěvky).

18. Vícenásobné definice funkcí, implicitní hodnoty parametrů, nepoužité parametry.

Přetěžování funkcí:
Pozn.: Mělo by jít o vícenásobné definice funkcí, ale nejsem si jistý.
Přetížení funkcí je možnost deklarovat, i definovat více funkcí stejného jména s různým počtem, nebo s různými typy parametrů.

Příklad: Mohu definovat dvě funkce se stejným jménem max.

int max(int a, int b)
{
return (a>b)? a:b;
}

float max(float a, float b)
{
return (a>b)? a:b;
}

Zavolám-li funkci max s parametry typu float vrátí mi větší z nich jako typ float. Zavolám-li funkci max s parametry typu int vrátí mi větší z nich jako typ int. Při přetěžování funkcí musíte dávat pozor na případné nejednoznačnosti. Kdyby jste v našem příkladě zavolali funkci max(1.0,2.0), překladač by vás upozornil na chybu. Neví totiž, zda volat max s parametry float, nebo parametry implicitně přetypovat na int a volat max s parametry int. Tedy volání funkce je nejednoznačné, překladač neví, kterou funkci vybrat. Tento problém vyřešíte, jestliže budete volat max((float)2.0,(float)3.5).

Implicitní hodnoty parametrů funkcí:
Jestliže předpokládáte, že budete funkci často volat s nějakou hodnotou parametru, můžeme tuto hodnotu uvést jako implicitní, a při volání ji v seznamu parametrů neuvádět.

Příklad:

int soucet(int a, int b, int c = 0) /* 3. parametr je implicitně 0. */
{
return (a+b+c); /* vracím součet parametrů*/
}

void main()
{
int cislo;
. . . // Nějaký program
cislo = soucet(1,2,3); /* Zavolá se funkce soucet s parametry a = 1 , b = 2, c = 3 */
. . . // Nějaký program
cislo = soucet(2,3); /* Zavolá se funkce soucet s parametry a = 2 , b = 3, c = 0. Za c se implicitně dosadí 0. Je to stejný výsledek, jako kdybychom napsali cislo = soucet(2,3,0). */
}

Implicitní hodnoty parametrů mohu zadávat jen v seznamu parametrů zprava. Pokud by tedy v naší funkci součet nemel parametr c implicitní hodnotu, parametr b by ji také nemohl mít. Parametr c (1. zprava) implicitní hodnotu má, proto lze definovat i implicitní hodnotu parametru b (2. zprava).

Nepoužité parametry:
Občas se stane, že potřebujeme deklarovat funkci s parametry, které ve skutečnosti nepotřebujeme. Jazyk C++ nabízí následující možnost: v definiční deklaraci uvedeme pouze typ parametru, nikoli jeho identifikátor.Taková deklarace způsobí, že překladač nás nebude upozorňovat, že jsme parametr nepoužili.

Příklad
Uvažujme definiční deklraci

int f(int)
{
/* tělo funkce */
}

To je funkce s jedním parametrem typu int, který nehodláme používat.

Žádné komentáře:

Okomentovat