프로그래머는 다양한 프로그래밍언어에서 함수를 오버로드할 수 있다. 함수 오버로드란 같은 함수의 이름을 가지고 있으나, 매개변수가 다른 함수이다. 그러나, Ada와 같은 언어에서는 리턴 타입도 오버로드할 수 있다. 즉, 같은 이름과 매개변수를 가지고 있으나, 리턴타입이 다를 수도 있는 것이다.
다음은 함수 오버로딩의 예이다.
위와 같이 함수 선언이 있을 때, 아래와 같은 변수 선언과 함수 호출을 포함한 프로그램을 작성할 수 있다.
f의 처음 두 선언은 위의 함수 f에 해당하지 않는다. 하지만, 세 번째 함수는 f(<float>, <float>)와 같은 형식이라 매개변수의 타입이 같고, 리턴 타입도 g(<int>, <float>)의 float과 같기 때문에 해당한다. 따라서, 3번째 f와 두 번째 g를 사용할 수 있다.
이렇게 3번째 f와 2번째 g를 사용했기 때문에, 다음과 같이 숫자와 함께 표현할 수 있다.
하지만, 위의 함수 선언을 이용해서 c = g(a, f(a, c))는 사용할 수 없다.
마지막으로 다음과 같은 함수 선언이 있다고 하자.
위와 같은 선언에서 다음과 같은 함수 호출은 애매모호(ambiguous)하기 때문에 사용할 수 없다.