Przeciążanie nazw funkcji polega na wielokrotnym wykorzystaniu takiej samej jej nazwy, różniącej się tylko typem i ilością argumentów (przeciążanie funkcji można traktować jako polimorfizm).
Rozpatrzmy funkcję, która będzie liczyła pole pewnej figury. Pole to uzależnimy od ilości argumentów i ich typów. Funkcja będzie nosiła nazwę Pole.
#include <iostream>
using namespace std;
float Pole(float a)
{
return a*a;
}
double Pole(double r)
{
return 3.14*r*r;
}
float Pole(float a,float b)
{
return a*b;
}
int main()
{
float a,b;
double r;
char opcja;
cout<<"Wybierz opcję: "<<endl;
cout<<"1 - pole kwadratu "<<endl;
cout<<"2 - pole prostokąta "<<endl;
cout<<"3 - pole koła "<<endl;
cin>>opcja;
switch(opcja)
{
case '1':
cout<<"Podaj długość boku: "; cin>>a;
cout<<"Pole kwadratu wynosi "<<Pole(a)<<endl;
break;
case '2':
cout<<"Podaj długość boku a: "; cin>>a;
cout<<"Podaj długość boku b: "; cin>>b;
cout<<"Pole prostokąta wynosi "<<Pole(a,b)<<endl;
break;
case '3':
cout<<"Podaj długość promienia: "; cin>>r;
cout<<"Pole koła wynosi "<<Pole(r)<<endl;
break;
default: cout<<"Wybrałeś nieprawidłową opcję!"<<endl;
}
return 0;
}
Do przeciążenia nazwy funkcji nie wystarczy różny tym zwracanych wartości np.:
int funkcja(int a)
char funkcja(int a)
W przykładzie powyżej, funkcje mają różne zwracane wartości, natomiast takie same argumenty - kompilator wyrzuci błąd!