1 / 15

Wprowadzenie do programowania

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

iwalani
Download Presentation

Wprowadzenie do programowania

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    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 lokalne jeszcze 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)

More Related