150 likes | 364 Views
Przeciazenie (przeladowanie) nazwy funkcji. Przeladowanie (przeciazenie) nazwy funkcji polega na tym, ze w danym zakresie waznosci (np. pliku) jest wiecej niz jedna funkcja o takiej samej nazwie.To, ktra z tych funkcji zostanie w danym przypadku uaktywniona, zalezy od liczby i typu argumentw dla
E N D
1. Wprowadzenie do programowania wyklad 6
Agata Plrola
Wydzial Matematyki UL
2005/2006
http://www.math.uni.lodz.pl/~polrola
2. Przeciazenie (przeladowanie) nazwy funkcji Przeladowanie (przeciazenie) nazwy funkcji polega na tym, ze w danym zakresie waznosci (np. pliku) jest wiecej niz jedna funkcja o takiej samej nazwie.
To, ktra z tych funkcji zostanie w danym przypadku uaktywniona, zalezy od liczby i typu argumentw dla ktrych jest ona wywolywana
przyklady prog59-przeciazania.cpp prog510-przeciazania_tylko_typ.cpp
3. Funkcje o takich samych nazwach MUSZA rznic sie liczba lub typem argumentw (inaczej kompilator zwrci blad).
dopuszczalna jest tez sytuacja, gdy dwie funkcje maja argumenty tego samego typu, ale w rznej kolejnosci: int wypisz (char z, int k); int wypisz (int k, char zz);
Przy rozrznianiu funkcji typ zwracanej wartosci nie jest brany pod uwage
4. przeladowanie od srodka:
dla kompilatora przeladowane funkcje maja RZNE nazwy kompilator pamieta nazwy funkcji wraz z typami argumentw, np.
void fkcja (void); to fkcja__Fv
void fkcja(int,double); to fkcja__Fid
void fkcja(double, int); to fkcja__Fdi
itd
5. Zmienne globalne i lokalnejeszcze raz Mozemy zdefiniowac pewne zmienne, ktre beda widoczne we wszystkich funkcjach danego programu sa to tzw zmienne globalne
Wewnatrz funkcji mozna definiowac zmienne, ktre sa zmiennymi lokalnymi tej funkcji
6. Nazwa zadeklarowana na zewnatrz wszystkich funkcji ma zasieg globalny, czyli jest dostepna wewnatrz wszystkich funkcji umieszczonych w danym pliku
... przy czym jest widziana dopiero ponizej linii w ktrej zostala zadeklarowana
Nazwa (obiekt) lokalny danej funkcji jest widoczna tylko w tej funkcji w ktrej zostala zadeklarowana
... rwniez ponizej linii w ktrej zostala zadeklarowana
Nie mozna zatem w jednej funkcji odwolac sie do zmiennej lokalnej innej funkcji...
... a dwie funkcje moga miec zmienne lokalne o takich samych nazwach
7. Jesli w obrebie funkcji definiujemy jakies zmienne, to sa one zazwyczaj pamietane na tzw. stosie (czyli w obszarze podrecznym). Sa to tzw. zmienne automatyczne
zmienne globalne (i zmienne z przestrzeni nazw) sa pamietane w normalnym obszarze pamieci
Normalny obszar pamieci przed uruchomieniem programu jest zerowany. Niezainicjalizowana zmienna globalna ma zatem na poczatku wartosc 0 (odpowiednia dla danego typu)
Zmienne automatyczne nie sa zerowane przy powolywaniu do zycia. Maja wartosc losowa
8. Po zakonczeniu bloku, w ktrym zostala powolana do zycia zmienna automatyczna, przestaje ona istniec.
dokladny moment likwidacji danego obiektu zalezy od kompilatora, ale w kazdym razie nie mozna liczyc, ze po zakonczeniu bloku zmienna istnieje
Przy ponownym wejsciu do danego bloku np. ponownym wywolaniu tej samej funkcji zmienna jest powolana do zycia po raz kolejny
oczywiscie przerwanie wykonywania jednej funkcji przez wywolanie innej nie powoduje zlikwidowania zmiennych pierwszej funkcji znajdujacych sie na stosie
9. Obiekty lokalne statyczne Jesli chcielibysmy, aby zmienna lokalna dla danej funkcji nie ginela, tylko przy ponownym wejsciu do tej funkcji miala te sama wartosc jak przy ostatnim opuszczeniu tej funkcji, to musimy ja zdefiniowac jako statyczna
deklaracja zmiennej statycznej rzni sie od deklaracji zmiennej normalnej tylko slowem static na poczatku: static typ_zmiennej nazwa;
obiekty statyczne sa przechowywane w normalnej pamieci
przyklad: prog514-zliczanie_wywolan.cpp
10. Funkcje rekurencyjne Funkcja moze wywolywac sama siebie. Jest to tzw. rekurencja (rekursja).
Moze to robic kazda funkcja, tyle ze jesli nie ma w niej warunku zatrzymujacego rekurencje, to funkcja bedzie sie wywolywala sie w nieskonczonosc, tzn. az do wyczerpania pamieci
przyklad prog511-silnia_rek.cpp
11. Funkcja rekurencyjna - zmienne Gdy funkcja rekurencyjna wywoluje sama siebie, na stosie sa juz zmienne automatyczne bedace wlasnoscia pierwszego wywolania tej funkcji. Kolejne jej wywolanie umieszcza na stosie swoje wlasne zmienne automatyczne
Zmienne zadeklarowane jako statyczne nie tylko nie gina po zakonczeniu wywolania funkcji, ale sa rwniez wsplne dla wszystkich rekurencyjnych wywolan tej funkcji.
przyklad prog512-sumator_rek.cpp
12. Instrukcja typedef Instrukcja typedef jezyka C++ umozliwia nadanie innej nazwy pewnemu juz istniejacemu typowi: typedef int ocena; ocena s;
Dzieki temu mozemy w programie latwo zmienic typ sluzacy do reprezentowanie ocen, jesli zachodzi taka potrzeba
przyklad prog60-typedef.cpp
13. Rekordy i struktury Jesli potrzebujemy zlozonego typu danych laczacego w jedna calosc elementy rznych typw, to:
w Pascalu i Adzie mozemy zdefiniowac odpowiedni typ rekordowy
przyklad prog61-osoba.adb
w C++ mozemy uzyc tzw. struktury
14. strukture mozemy zdefiniowac nastepujaco:struct nazwa_struktury{ deklaracje elementw};
przyklady: prog61-osoba.cpp prog62-struktura.cpp prog63-punkty.cpp
tak naprawde w C++ struktury istnieja glwnie dla zgodnosci z C lepiej uzywac klas ale na razie mozemy z nich korzystac
15. Ciagi znakw (lancuchy) Standardowo do reprezentacji napisu uzywa sie tablicy znakw
Tablica zawiera napis oraz znak konca napisu
Mozna uzywac funkcji gets() i puts() do pobierania/wypisywania napisw
przyklad: prog64-zdania.cpp
wygodniejszym sposobem jest korzystanie z klasy string (przyklad prog65-strings.cpp)