Programowanie i algorytmy

Przeciążanie nazw funkcji

powrót

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 zaliczyć do elementów polimorfizmu).

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!