Přetížení funkce

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Přetížení funkce (anglicky function overloading) je v informatice taková metoda zápisu zdrojového kódu programu, kdy je deklarováno více funkcí pod stejným názvem, přičemž se navzájem liší ve struktuře seznamu parametrů (počet, datový typ). Při volání funkce překladač analyzuje parametry a podle toho určí odpovídající funkci. Přetížení se týká i návratové hodnoty, překladač analyzuje typ požadované návratové hodnoty na levé straně přiřazovacího operátoru = a podle toho vybere příslušnou funkci.

Přetěžování funkcí je v praxi často používané jak ve strukturovaném, tak i v objektově orientovaném programování. Velice výhodné může být přetížení konstruktorů.[1]

Příklad přetížení funkce v programovacím jazyce C (různé struktury seznamu parametrů):

double prumer(double n1, double n2){
	return (n1+n2)/2;
}
 
double prumer(int n1, int n2){
	return (n1+n2)/2;
}
 
double prumer(int n1, int n2, int n3){
	return (n1+n2)/2;
}
 
int main(){
	double d1, d2, pr;
	int i1, i2, i3;
	pr = prumer(i1, i2, i3); // Tady se vola treti funkce
	pr = prumer(d1, d2); // Tady se vola prvni funkce
	pr = prumer(i1, i2); // Tady se vola druha funkce
	return 0;
}

Příklad přetížení funkce v programovacím jazyce C++ (různé datové typy návratových hodnot):

double get_sqrt(double n){ 
	// tady bude prislusny kod
};
 
Complex get_sqrt(double n){ 
	// tady bude prislusny kod 
};
 
int main(){
 
	Complex compl;
	double real;
	double n;
	if (n >= 0)
		real = get_sqrt(n); // Tady se vola prvni funkce
	else
		compl = get_sqrt(n); // Tady se vola druha funkce
	return 0;
}

Příklad přetížení metod v programovacím jazyce C++:

class Complex{
	public:
		// Tady bude deklarace konstruktoru, promennych atd.
		Complex get_sum(const Complex &c2);
		Complex get_sum(double re2);
};
 
Complex Complex::get_sum(const Complex &c2){ 
 
	Complex sum; 
	sum.set(re+c2.get_re(), im+c2.get_im()); 
	return sum; 
}
 
Complex Complex::get_sum(double re2){ 
 
	Complex sum; 
	sum.set(re + re2, im); 
	return sum; 
}
 
int main(){
 
	Complex n1, n2, sum;
	double re;
	sum = n1.get_sum(n2); // Tady se vola prvni metoda
	sum = n1.get_sum(re); // Tady se vola druha metoda
	return 0;
}

Přetížení operátorů[editovat | editovat zdroj]

Jazyk C a C++ obsahuje interní definice operátorů pro základní datové typy (int, float, double aj.). C++ umožňuje definovat operátory pro uživatelské typy, tj. pro objektové proměné (např. chceme-li sečíst dvě struktury typu Matice). Pokud překladač narazí v kódu na znak operátoru, analyzuje datové typy na levé a pravé straně (u binárních operátorů), pokud se jedná o základní datové typy, použije interní zpracování, pokud se jedná o uživatelské typy (tj. objektové typy), hledá operátor, jehož dva parametry odpovídají typově použitým typům.[1]

Příklad přetížení operátoru v programovacím jazyce C++:

Complex operator+(const Complex &c1, const Complex &c2){ //deklarace přetížení operátoru +
 
	Complex sum;
	sum.set(c1.get_re() + c2.get_re(), c1.get_im() + c2.get_im());
	return sum;
}
 
int main(){
 
	Complex n1, n2, sum;
	sum = n1 + n2; // Tady se zavola operator+
	return 0;
}

Reference[editovat | editovat zdroj]

  1. a b PROKOP Martin. Pokročilé programování v jazyce C pro chemiky - Reference, přetížení funkcí, operátory [online]. Brno: NCBR, [cit. 2011-05-10]. Dostupné online.  

Související články[editovat | editovat zdroj]