6.2. Použití standardních argumentů

Časová náročnost
Časová náročnost: 10 minut

V jazyce C++ existuje prvek, který má vztah k přetěžování funkcí. Tento prvek se jmenuje standardní argument a umožňuje nám dát argumentům standardní hodnotu, když při volání funkce není specifikován odpovídající argument.

upozornění

Pro zadání standardního argumentu do argumentu funkce za argument vložíme rovnítko a hodnotu, která má být použita jako standardní, když se při volání funkce neobjeví odpovídající argument.

Například následující funkce přiřazuje svým dvěma argumentům standardní hodnotu 1.

Jednoduchý příklad
Příklad:
void fce(int a=1, int b=1);


Na první pohled je tato syntaxe podobná inicializaci proměnné. U funkcí je to však trochu jiné. Funkce může být volána třemi způsoby:
  1. Bez argumentů
  2. S jedním argumentem
  3. Se dvěma argumenty

V prvním případě mají a i b hodnotu 1.

Jednoduchý příklad
Příklad:
fce();


Ve druhém případě má a hodnotu 5 a b má hodnotu 1.

Jednoduchý příklad
Příklad:
fce(5);


Ve třetím případě má a hodnotu 5 a b má hodnotu 10.

Jednoduchý příklad
Příklad:
fce(5, 10);


upozornění Když vytváříme funkci, která má jeden nebo více standardních argumentů, musí být tyto argumenty specifikovány pouze jednou, a to buď v prototypu funkce nebo v její definici. Standardní hodnoty nemohou být současně specifikovány v prototypu a v definici funkce.

Standardní argumenty musí být na pravé straně každého argumentu, který nemá standardní hodnotu. Když již začneme definovat standardní argumenty, nemůžeme pak specifikovat nějaký argument, který by standardní hodnotu neměl.

Standardní argumenty musí být konstantami nebo globálními proměnnými. Nemohou to být lokální proměnné nebo jiné argumenty.

Následující program má za úkol vypočítat plocha čtyřúhelníka v případě že jsou zadány dva rozměry a čtverce v případě že je zadán pouze jeden rozměr.

src/6_4.cpp
Příklad 6.4.
#include <iostream.h>

double rect_area(double length, double width = 0)
{
  if(!width) width = length;
  return length * width;
}

int main()
{
  cout  << "Obsah ctyruhelnika daneho rozmery 10 x 5.8 je: ";
  cout << rect_area(10.0, 5.8) << '\n';

  cout  << "Obsah ctyruhelnika daneho rozmery 10 x 10 je: ";
  cout << rect_area(10.0) << '\n';

  return 0;
}

Pokud nezadáme druhou hodnotu je jako standardní argument použita 0. Pokud je jako druhá hodnota načtena 0 považujeme daný čtyřúhelník za čtverec a jeho obsah vypočteme jako obsah čtverce.