Přetěžování
Author
Albert FloresPřetížení funkce či operátoru 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
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). +more Nezaměňujte proto přetěžování funkcí s [url=https://web. archive. org/web/20180902084233/http://www. linuxsoft. cz/en/article. php. id_article=1355]přepisováním funkcí (metod)[/url], 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ů.
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
Jazyk C a C++ obsahuje interní definice operátorů pro základní datové typy (int, float, double aj. ). +more 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.
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; }