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!