Objektum orientált programozás 2. Függvények és mutatók Nagy Szilvia
Függvények Sorrendben kell a függvényeket definiálni, a main rész előtt. A main is csak egy speciális függvény void, int, char… , vagy bármilyen változótípus lehet a függvény kimenete A függvény argumentumai tetszőleges típusú változók lehetnek, (akár üres bemenetel is előfordulhat) return adja meg a visszatérési értékeket.
Függvények Definíciójuk: void függvény(int argumentum1, int argumentum2){ parancsok; } Meghívásuk: függvény(változó1, változó2); példák
Függvények – változók Helyi változók: csak a függvényeken belül érvényesek. Deklarálásuk a függvényen belül történik. Globális változók: minden függvény eléri őket, meg tudja őket változtatni. Deklarálásuk a függvények előtt történik.
Függvények fejléce A program elején elegendő csak a függvény bemeneti és kimeneti változóinak típusát és a függvény nevét – azaz egy prototípust – megadni, a függvény teljes leírása kerülhet a program végére is. A program így áttekinthetőbb lesz, könnyen megtalálható a main rész. kimeneti típus fvnév(argumentumok); … (programtörzs) a teljes függvényleírás (ismételt fejléccel)
Függvények fejléce hagyományos, program eleji leírás:
Függvények fejléce fejléces, program végi leírás:
Függvények külön állományban Egy-egy függvény több program számára is szükséges lehet. Ha külön fájlban van a függvény, elegendő csak meghívni, nem szükséges a teljes függvényt a programba másolni, megteszi helyettünk a fordító. fejlécfájl – típusa .h függvényfájl – típusa .c programban szerepel, hogy #include ”fvfájlnév.h”
Függvények külön állományban Főprogram
Függvények külön állományban Fejléc (header):
Függvények külön állományban Fejléc (header): Függvényfájl:
Függvények külön állományban Fordítás során –c kapcsolóval csak fordítjuk a .c típusú fájlokat, majd az így kapott .o kiterjesztésű fájlokat újrafordítjuk. pl. gcc –c atlagolofvdarabolt.c gcc –c atlagolo.c gcc atlagolofvdarabolt.o atlagolo.o
Mutatók Csak a memóriatartomány címére mutat Gépfüggő méret: a memóriacímkék mérete bitekben. Típusok: int *, char*, … Ha egy adott változóra szeretnénk mutatni: mutató=&adat; Meghívásuk: Ha a mutató értékét szertnénk: mutató; Ha amire mutat: *mutató;
Mutatók Tömböknél a tömb első elemére mutat rugalmas hosszúságú tömbök Mutatók alkalmasak függvények paramétereinek is: előny, hogy nem kell magát a változót elérhetővé tenni a függvény számára, így tulajdonképpen a mutatók helyettesíthetik a globális változókat. Sehova nem mutató NULL.
Mutatók – helyi és globális változók !! a kimenet: 12 a függvény nem fér a lokális változóhoz.
Mutatók – helyi és globális változók a kimenet: 13 értékadással a függvény kimenetét írtuk a szam változóba
Mutatók – helyi és globális változók a kimenet: 13 és 38 a globális változókat minden függvény módosíthatja.
Mutatók – helyi és globális változók a kimenet: 13 és 38 pointerekkel hívjuk meg a lokális változókat
Mutatók – stringek Tömböknél a tömb első elemére mutat rugalmas hosszúságú tömbök Karakterláncokra általában a mutatójukkal hivatkozunk, tipikusan rugalmas hosszúságú tömb a karakterlánc, csak az első elemre kell mutatni, a többi karakter megtalálható, és addig tart, amíg 0 karaktert nem talál. Veszély: ha nincs nulla karakter futási hiba.