Kris Jamsa Wygraj Z C++ lekcja14


Lekcja 13LEKCJA 13
Przeciążanie funkcji
Definiując funkcję w programie musisz określić typ wartości zwracanej przez
funkcję, a także liczbę parametrów i ich typy. Kiedyś (jeśli programowałeś w
języku C), jeśli miałeś funkcję dodaj_liczby, która działała dla dwóch liczb
całkowitych i chciałeś przy użyciu analogicznej funkcji dodawać trzy liczby
całkowite, to musiałeś utworzyć funkcję o innej nazwie. W ten sposób powinieneś
zdefiniować np. funkcje dodaj_dwie_liczby i dodaj_trzy_liczby. Analogicznie,
jeśli chciałeś przy użyciu funkcji dodawać dwie liczby typu float, musiałeś
wymyślić jeszcze jedną nazwę funkcji. Aby tego uniknąć, C++ pozwala definiować
różne funkcje o tej samej nazwie. Podczas kompilacji kompilator C++ bada liczbę
argumentów wywołania funkcji i w zależności od niej wykorzystuje kod
odpowiedniej funkcji. Proces definiowania wielu funkcji o tej samej nazwie, z
których kompilator ma wybierać odpowiednią, to przeciążanie funkcji. Podczas tej
lekcji opiszemy, w jaki sposób możesz przeciążać funkcje w swoich programach.
Pod koniec tej lekcji będziesz rozumiał następujące zagadnienia podstawowe:
Przeciążanie funkcji pozwala używać tej samej nazwy dla funkcji o różnych
listach parametrów.
Aby przeciążyć funkcję w programie, po prostu definiujesz dwie funkcje o tej
samej nazwie różniące się liczbą lub typami parametrów.
Przeciążanie funkcji jest możliwością C++, której nie ma język programowania C.
Jak zobaczysz, przeciążanie funkcji jest wygodne i poprawia czytelność
programów.


Przechodzimy do przeciążania funkcji
Dzięki przeciążaniu funkcji możesz definiować w programach różne funkcje o tej
samej nazwie. Na przykład przedstawiony poniżej program przeciąża funkcję
dodaj_liczby. Pierwsza definicja funkcji dodaje dwie wartości typu int. Druga
funkcja dodaje trzy liczby. Podczas kompilacji kompilator ustala, której
definicji użyć w konkretnym wywołaniu:
#include

int dodaj_liczby (int a, int b)
{
return (a+b);
}

int dodaj_liczby (int a, int b, int c)
{
return (a+b+c);
}

void main(void)
{
cout << "200 + 801 = " << dodaj_liczby(200, 801) << endl;
cout << "100 + 201 + 700 = " << dodaj_liczby(100, 201, 700) << endl;
}

Jak widzimy, w programie zdefiniowano dwie funkcje dodaj_liczby. Pierwsza dodaje
dwie liczby typu int, a druga dodaje trzy liczby. Nie musisz w specjalny sposób
informować kompilatora o przeciążaniu funkcji, po prostu skompiluj program. Na
podstawie podawanych parametrów kompilator "zgadnie", której definicji ma użyć.
Podobnie przedstawiony poniżej program PRZECIAZ.CPP przeciąża funkcję
pisz_komunikat. Pierwsza z funkcji wyświetla komunikat standardowy, jeśli nie
podano Żadnych parametrów. Druga wyświetla komunikat przekazany jako parametr, a
trzecia wypisuje dwa komunikaty:
#include

void pisz_komunikat (void)
{
cout << "Komunikat standardowy: Wygraj z C++" << endl;
}

void pisz_komunikat (char *komunikat)
{
cout << Komunikat << endl;
}

void main(void)
{
pisz_komunikat ();
pisz_komunikat ("Fantastyczne!");
pisz_komunikat ("C++ nie jest taki straszny",
"Przeciażanie jest fajne!");
}



Kiedy przeciążać funkcje?
Jednym z najbardziej typowych zastosowań przeciążania jest wykorzystywanie
funkcji do otrzymywania wyniku niezależnie od typu parametrów. Na przykład,
załóżmy, że program zawiera funkcję dzien_tygodnia, która zwraca dzień tygodnia
(0 dla niedzieli, 1 dla poniedziałku,... 6 dla soboty). Możesz przeciążyć tę
funkcję tak, by zwracała dzień tygodnia, gdy podana jest data juliańska (liczba)
lub gdy podasz dzień, miesiąc i rok:
int dzien_tygodnia (int data_julianska)
{
//Instrukcje
}

int dzien_tygodnia (int dzien, int miesiac, int rok)
{
//Instrukcje
}

Gdy poznasz możliwości obiektowe języka C++ przedstawione w dalszych lekcjach,
będziesz mógł dzięki przeciążaniu funkcji rozszerzać możliwości pisanych przez
Ciebie programów.
Przeciążanie funkcji poprawia czytelność programów
Przeciążanie funkcji w C++ pozwala zdefiniować w programie wiele funkcji o tej
samej nazwie. Funkcje przeciążone nie muszą zwracać wartości tego samego typu
(choć dwie funkcje nie mogą się różnić jedynie typem zwracanej wartości) i muszą
się różnić liczbą lub typami parametrów. Przed pojawieniem się kompilatorów C++
akceptujących przeciążanie funkcji. w programach pisanych w języku C trzeba było
tworzyć wiele funkcji o podobnych nazwach. Programiści musieli wtedy pamiętać,
jakiej nazwie funkcji odpowiadała jaka kombinacja parametrów. Natomiast
przeciążanie funkcji upraszcza zadanie programisty, który musi pamiętać tylko
nazwę jednej funkcji.


Zapamiętaj
Przeciążanie funkcji pozwala definiować w programie wiele funkcji o tej samej
nazwie. Podczas kompilowania programu kompilator ustala na podstawie liczby i
typów podanych parametrów, którą funkcję wywołać w danym miejscu. Podczas tej
lekcji dowiedziałeś jak łatwo można przeciążać funkcje. Podczas lekcji 14
dowiesz się, w jaki sposób referencje języka C++ upraszczają proces zmiany
parametrów wewnątrz funkcji. Zanim jednak przejdziemy do następnej lekcji
upewnij się, że opanowałeś już następujące zagadnienia podstawowe:
Dzięki przeciążaniu funkcji możesz w programie dawać różne "spojrzenia", na
jedną funkcję.
Aby przeciążyć funkcję w programie, po prostu definiujesz dwie funkcje o tej
samej nazwie, które różnią się między sobą liczbą lub typami przyjmowanych
parametrów.
Podczas kompilowania programu kompilator ustala na podstawie liczby i typów
podanych parametrów, którą funkcję wywołać w danym miejscu.
Przeciążanie funkcji upraszcza programowanie pozwalając programiście używać
jednej nazwy funkcji do konkretnego zadania.



WsteczSpis treściDalej



Wyszukiwarka

Podobne podstrony:
Kris Jamsa Wygraj Z C lekcja32
Kris Jamsa Wygraj Z C lekcja 5
Kris Jamsa Wygraj Z C lekcja23
Kris Jamsa Wygraj Z C lekcja38
Kris Jamsa Wygraj Z C lekcja35
Kris Jamsa Wygraj Z C lekcja20
Kris Jamsa Wygraj Z C lekcja27
Kris Jamsa Wygraj Z C lekcja34
Kris Jamsa Wygraj Z C lekcja18
Kris Jamsa Wygraj Z C lekcja17
Kris Jamsa Wygraj Z C lekcja25
Kris Jamsa Wygraj Z C lekcja36
Kris Jamsa Wygraj Z C lekcja 4
Kris Jamsa Wygraj Z C lekcja33
Kris Jamsa Wygraj Z C lekcja 7
Kris Jamsa Wygraj Z C lekcja30
Kris Jamsa Wygraj Z C lekcja12
Kris Jamsa Wygraj Z C lekcja28
Kris Jamsa Wygraj Z C lekcja 6

więcej podobnych podstron