Přetěžování

Přetížení funkce či operátoru (anglicky function overloading, operator overloading) je v programování taková metoda zápisu zdrojového kódu programu, kdy je možné definovat více funkcí (obslužných metod) se stejnými názvy, zato s různými implementacemi, a to při zachování stejného typu výsledku a i účelu. Volání přetížené metody spustí specifickou implementaci danou kontextem volání.

Přetížení funkce

Na tuto kapitolu jsou přesměrována hesla Přetížení funkce a Přetížení metody.

Rozhodnutí o tom, která z dostupných funkcí bude volána, provádí překladač podle toho, s jakými parametry je funkce volána (rozhoduje počet a datový typ předaných parametrů).

V přetěžování funkcí je rozhodnutí o volané funkci provedeno již při překladu (tj. staticky). Nezaměňujte proto přetěžování funkcí s přepisováním funkcí (metod), kde se o volání vhodné funkce rozhoduje až za běhu programu pomocí virtuálních funkcí (tj. dynamicky).

Použití

Přetěžování funkcí je v praxi často používané v objektově orientovaném programování, kde je také používáno pro přetížení konstruktorů.[1]

Příklad přetížení funkce v programovacím jazyce C++ (různé typy a počet 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+n3)/3;
}

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í 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átoru

Na tuto kapitolu je přesměrováno heslo Přetížení operátoru.

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ěnné (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

  1. a b PROKOP Martin. Pokročilé programování v jazyce C pro chemiky – Reference, přetížení funkcí, operátory [online]. Brno: NCBR, 2011 [cit. 2011-05-10]. Dostupné v archivu pořízeném dne 2011-07-18.  – neplatný odkaz !

Související články