6.3. Přetěžování a nejednoznačnost

Časová náročnost
Časová náročnost: 8 minut
upozornění Nejednoznačnost způsobená přetěžováním může být do programu vnesena převodem typů, přes argumenty odkazů nebo přes standardní argumenty.

Následující příklad obsahuje chybu nejednoznačnosti. V tomto případě není jasné, zda je volána funkce s argumentem float nebo double.

Chybný příklad:

#include <iostream.h>

float f(float i)
{
  return i / 2.0;
}

double f(double i)
{
  return i / 3.0;
}

int main()
{
  float x = 10.09;
  double y = 10.09;

  cout << f(x); // jednoznacne - float
  cout << f(y); // jednoznace - double

  cout << f(10); // nejednoznacen - float nebo double?

  return 0;
}


Nejednoznačnost může vzniknout, když přetížíme funkci, v níž některé přetížené funkce používají standardní argumenty.

Chybný příklad:
#include <iostream.h>

int f(int a)
{
  return a*a;
}

int f(int a, int b = 0)
{
  return a*b;
}

int main()
{
  cout << f(10, 2); // vola funkci f(int, int)
  cout << f(10); // nejednozncne - vola f(int) nebo f(int, int)?

  return 0;
}