Najlepiej nie mieszać ze sobą przeciążania i argumentów domyślnych. Podczas wybierania funkcji do wywołania uwzględnia się też domyślne konwersje i trzeba znać ich priorytety; np. jeśli funkcję przeciążymy na typy short i long, to wywołanie z typem float jest niejednoznaczne. W zależności od języka przeciążać można tylko na podstawie typów parametrów, lub na podstawie typów parametrów i wartości zwracanej (np. w języku Ada). Uzyskanie wskaźnika do przeciążonej funkcji jest niemożliwe. Udaje się to tylko w przypadku wyrażeń, w których oczekuje się konkretnego typu od takiego wyrażenia, np. przypisując do zmiennej typu wskaźnika do funkcji – wtedy zostanie wybrana ta funkcja, która pasuje do sygnatury funkcji, do której jest ten wskaźnik. Nie można jednak takiej funkcji używać jako argumentu do szablonu funkcji – jest to znany problem z używaniem funkcji std::transform wraz ze std::tolower.

Zobacz też Polimorfizm Przeciążanie operatorów

Przypisy

Kategoria:Konstrukcje programistyczne