Přetěžování

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Př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; }

Reference

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top