|
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;
}
|