Funkcje 71
C++ pozwala na stworzenie więcej niż jednej funkcji o danej nazwie. Możliwość ta określana jest jako przeciążanie funkcji. Funkcje takie muszą różnić się listą parametrów, typami parametrów lub ich liczbą. Oto przykład:
int mojaFunkcja(int, int); int mojaFunkcja(long, long); int mojaFunkcja(long);
Funkcja mojaFunkcja () jest przeciążona z użyciem trzech różnych list parametrów. Dwie pierwsze różnią się typem parametrów, trzecia ma inną ich liczbę.
W przypadku przeciążanych funkcji, typ wartości zwracanej może być inny lub taki sam. Nie można jednak przeciążać funkcji opierając się jedynie na typie wartości zwracanej. Trzeba wykorzystać różne listy parametrów.
Przeciążanie funkcji określane jest również mianem polimorfizmu funkcji. Oznacza to, że funkcja ma wiele różnych form.
Polimorfizm pozwala na przeciążanie funkcji za pomocą różnych ich treści. Zmieniając liczbę lub typ parametrów, możesz nadać funkcjom te same nazwy. W momencie wywołania, parametry będą decydować, która z funkcji zostanie wykonana. Możesz np. stworzyć funkcję obliczającą wartość średnią dla liczb całkowitych (int), ułamkowych (double) bez konieczności tworzenia osobnych nazw dla różnych typów jak np.: SredniaCalkowita () czy SredniaUlamkowa () itp.
Załóżmy, że potrzebujesz funkcją podwajającą dowolną podaną wartość. Chcesz mieć możliwość podania zmiennej typu int, long, float i double. Bez przeciążania funkcji musiał byś napisać cztery funkcje o różnych nazwach:
int Podwajanielnt(int); long PodwajanieLong(long); float PodwajanieFloat(float); double PodwajanieDouble(double);
Natomiast z użyciem przeciążenia możesz użyć następującej deklaracji:
int Podwajanie (int) ; long Podwajanie(long); float Podwajanie(float); double Podwajanie(double);
Łatwiej będzie takie funkcje czytać i wykorzystywać. Nie musisz się martwić, którą funkcję wywołać. Musisz jedynie przekazać wartość. Program automatycznie wykona właściwą funkcję.
Normalnie, kiedy definiujesz funkcję, kompilator tworzy w pamięci jeden zestaw instrukcji. Kiedy wywołujesz funkcję program przechodzi do wykonania tych instrukcji. Kiedy funkcja się kończy, program wraca do następnej instrukcji po wywołaniu.
C++ pozwala na stworzenie więcej niż jednej funkcji o danej nazwie. Możliwość ta określana jest jako przeciążanie funkcji. Funkcje takie muszą różnić się listą parametrów, typami parametrów lub ich liczbą. Oto przykład:
int mojaFunkcja(int, int); int mojaFunkcja(long, long); int mojaFunkcja(long);
Funkcja mojaFunkcja () jest przeciążona z użyciem trzech różnych list parametrów. Dwie pierwsze różnią się typem parametrów, trzecia ma inną ich liczbę.
W przypadku przeciążanych funkcji, typ wartości zwracanej może być inny lub taki sam. Nie można jednak przeciążać funkcji opierając się jedynie na typie wartości zwracanej. Trzeba wykorzystać różne listy parametrów.
Przeciążanie funkcji określane jest również mianem polimorfizmu funkcji. Oznacza to, że funkcja ma wiele różnych form.
Polimorfizm pozwala na przeciążanie funkcji za pomocą różnych ich treści. Zmieniając liczbę lub typ parametrów, możesz nadać funkcjom te same nazwy. W momencie wywołania, parametry będą decydować, która z funkcji zostanie wykonana. Możesz np. stworzyć funkcję obliczającą wartość średnią dla liczb całkowitych (int), ułamkowych (double) bez konieczności tworzenia osobnych nazw dla różnych typów jak np.: SredniaCalkowita () czy SredniaUlamkowa () itp.
Załóżmy, że potrzebujesz funkcją podwajającą dowolną podaną wartość. Chcesz mieć możliwość podania zmiennej typu int, long, float i double. Bez przeciążania funkcji musiał byś napisać cztery funkcje o różnych nazwach:
int Podwajanielnt (int) ; long PodwajanieLong(long); float PodwajanieFloat(float); double PodwajanieDouble(double);
Natomiast z użyciem przeciążenia możesz użyć następującej deklaracji:
int Podwajanie (int) ; long Podwajanie(long); float Podwajanie(float); double Podwajanie(double);
Łatwiej będzie takie funkcje czytać i wykorzystywać. Nie musisz się martwić, którą funkcję wywołać. Musisz jedynie przekazać wartość. Program automatycznie wykona właściwą funkcję.
Normalnie, kiedy definiujesz funkcję, kompilator tworzy w pamięci jeden zestaw instrukcji. Kiedy wywołujesz funkcję program przechodzi do wykonania tych instrukcji. Kiedy funkcja się kończy, program wraca do następnej instrukcji po wywołaniu.