Przeciążanie funkcji
Transkrypt
Przeciążanie funkcji
Przeciążanie funkcji Przeciążanie nazw funkcji polega na wielokrotnym wykorzystaniu takiej samej jej nazwy, różniącej się tylko typem i ilością argumentów. Rozpatrzmy funkcję, która będzie liczyła pole pewnej figury. Pole figury jakiej ma liczyć uzależnimy od ilości argumentów i typów argumentów. Nasza funkcja będzie nosiła nazwę Pole. float Pole(float p) - funkcja liczy pole kwadratu double Pole(double p) - funkcja liczy pole koła float Pole(float a,float b) - funkcja liczy pole prostokąta itd. #include <cstdlib> #include <iostream> #include <fstream> 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; } system("pause"); return 0; } Kiedy nie wolno przeciążać funkcji? Do przeciążenia 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!