Programozás s 2. C++ nyelven

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Programozás s 2. C++ nyelven"

Átírás

1 Programozás s 2 Objektum Orientált Programozás C++ nyelven utolsó változtatás s

2 C++ Történetileg a C nyelv továbbfejleszt bbfejlesztésese Ennek előnyei: C programozó azonnal programozhat C-ként C C++-ban használva a plusz kényelmi k lehetőségeket Kulcsszavai azonosak/hasonlóak ak a C-velC Lehet vele hatékony OOP programokat készk szíteni Hátránya: nincs késztetk sztetés s az OOP gondolkodásm smódjának elsajátítására

3 C++ A C++ mintaprogramok letölthet lthetőek ek a tanszéki web oldalról: l: Amit itt esetleg nem találnak lnak meg, az pedig a /Programozas2/ címen biztos megtalálhat lható.

4 Az első C++ program // A világ keletkezése és s pusztulása. sa. A // -lal kezdődő szöveg megjegyzés. #include <iostream> // innen jön j n az std::cout (nincs benne '.h'!) class Univerzum // a világnak mint objektumnak a deklaráci ciója // leírja az objektumot, de nem hoz létre l egyet sem. public: // enélk lkül l kívülrk lről l nem látnl tnánk nk az ezután n felsorolt függvf ggvényeket Univerzum() // 'constructor' ez hozza majd létre az objektumot std::cout << "Big bang\n"; // szöveg kiiratás s a képernyk pernyőre re (console output), végén v n soremelés ~Univerzum() // 'destructor' megsemmisíti az objektumot std::cout << "Viszl" Viszlát\n"; // szöveg kiiratás s a képernyk pernyőre re (console output) ; // Globális lis terület (minden a -eken kívül k l ) Itt jön j n létre l a világ. // Lefut a constructora és s kiírja a szöveget // ez kell, ez az első függvény ami meghívódik a globális lis változv ltozók // létrejl trejötte tte után. Most nem csinál l semmit n a "main()' lefutott a globális lis változv ltozók k megsemmisülnek. Lefut az "azuniverzum" destructora Univerzum azuniverzum; int main() // miután a "main()' lefutott a glob

5 C++ programok futása Általánosságban a programok futása során 1. Elősz ször r a globális lis objektumok jönnek j létre. l Elősz ször lefoglalódik a memória az objektumoknak, utána lefut a constructoruk. Alaptípusoknak pusoknak nincs constructoruk. Jelen esetben a constructor-t t mi definiáltuk, és s lefutásakor szöveget ír r ki. 2. A main() fut le. Jelen esetben nem csinál l semmit (csak( boldoggá teszi a C programozókat ). ). Minden globális lis függvf ggvényt (most nem volt egy sem) vagy a main, az általa hívott h függvényláncolat, ncolat, vagy az objektumok hívnak. h 3. A main befejezése után n a globális lis objektumok eltünnek. Eközben zben lefutnak a destructor-jaik. Jelen esetben a destructor-t t mi definiáltuk, és s lefutásakor szöveget ír r ki.

6 Megjegyzések A Microsoft Visual Studio (2005) beli C++ fordítónak meg kell adni egy stdafx.h nevű (akár üres) header fájl is az <iostream> előtt! Tovább bbá minden új j projekt (solution) eseten az alábbi részt r magától l beírja:. #include "stdafx.h" stdafx.h". int t_main(int argc, _TCHAR* argv[]) return 0; A _tmain() valójában egy MAKRÓ,, ami a mi esetünkben main()-nel nel ekvivalens. Így definiált lták: #define _tmain main A _TCHAR pedig egy típus, t ami most char -ral ekvivalens. Így definiálj lják: typedef char _TCHAR; A main() függvf ggvénynek vagy nincs argumentuma, vagy 2 vagy 3 van neki: int main(int argc, char *argv[], [char char *env* env[] []] ) Az argc az argv karakter mutatókat tartalmazó tömb elemeinek száma ma,, amely mutatói i a paranzssorbeli paraméterekre mutatnak. a 0. elem a végrahajtott v program neve. Ha az env tömb is jelen van a futtatási környezet (SET) elemeire mutató mutatókat tartalmazza. Pl.. ha a programot így indítottuk C:\sajat könyvtk nyvtárból l parancssorból l : program d d valami akkor argc == 3 és s az argv értékei: argv[0]= [0]="C:\sajat\program", argv[1]= "-d", argv[2]= "valami" Nem minden rendszeren kerül l be a 0. paraméterbe a teljes elérési út

7 Feladat Módosítsuk a programot úgy, hogy több t univerzumot hozzon létre. l Vajon milyen sorrendben törtt rténik ez? És s a megsemmisülésük? Adjunk minden világnak egy egyedi azonosítót, t, akkor megtudhatjuk:

8 A módosm dosított Univerzum // egy univerzum, amelyik tudja magáról l melyik class Univerzum // a világnak mint objektumnak a deklaráci ciója Az // leírja az objektumot, de nem hoz létre l egyet sem. public: // enélk lkül l kívülrk lről l nem látnl tnánk nk az ezután n felsorolt függvf ggvényeket Univerzum(int int melyik) : _azon(melyik) // : utáni rész r a 'preambulum' ld. alább std::cout << "A" A " << "_azon" << ". Big Bang \n"; ~Univerzum() std::cout << "Viszl" Viszlát\n"; private: // ezt csak k az objetum maga látja l (adatrejtés) // Jelölj ljük k a privát t változv ltozókat egy aláhúzás s karakterrel! const int _azon; // const ha egyszer létrejl trejött tt nem változv ltozhat meg az értéke // ezért nem lehet értéket adni neki a belül l csak a // 'preambulum'-ban. ban. A preambulum előbb hajtódik végre, v mint // az objektum létrehozl trehozása ;

9 Több Univerzum létrehozl trehozása Ennek használata:. Univerzum univ1(1), univ2(2); main() Univerzum univ(3);

10 Objektumokbeli függvények/módszerek Hogy lehetne megkérdezni a világt gtól, hogyh ő melyik? class Univerzum public:... int Azon() const // a const itt azt jelenti, hogy ez a függvf ggvény // nem változtat v meg egy változv ltozót t sem return _azon_ azon; // csak const függvf ggvények férhetnek f hozzá a // const objektumokhoz,, ill const objektumnak //csak const függvf ggvényeit hívhatjukvhatjuk meg // ez látszl tszólag egy költsk ltséges függvf ggvényhívás, de itt ingyen van... ;

11 Háttér r informáci ció Egy adott osztálynak megfelelő objektumok mérete m az objektumban tárolt adatok (konstansok és s változv ltozók) számára lefoglalt memória méretek összege. A függvf ggvények minden objektumra ugyanazok és s a méret számításban sban nem jelennek meg. Figyelem: az adatok mérete m lehet nagyobb, mint amit megadtunk! Ugyanis a korszerű processzorok valamivel gyorsabban érik el az adatot, ha az 'dupla szó' ' határra van illesztve. Ekkor pl. egy char típust pusú adat 4 bájt b helyet foglal el, amiből l csak 1-et 1 használ, a többi t csak helykitölt ltés. Honnan "tudja" egy osztály egy függvf ggvénye mely objektum adatait használja? Minden függvf ggvény kap egy adott objektumra mutató pointert is. Ezt a fordító program rakja bele első paraméterk terként, nekünk nk sosem kell megadni. Ennek neve: this pointer. A this pointert mi is használhatjuk (néha kell is).

12 Beágyaz gyazás Minden univerzumban van anyag: class Anyag public: Anyag(int mi):_azon(mi) cout << _azon << ". anyag létrejött\n"; ~Anyag() cout << _azon << ". anyag megsemmisült lt\n"; private: const int _azon; ;

13 Beágyaz gyazás s II. class Univerzum // az _anyag létrehozása a preambulumban azelőtt törtt rténik, hogy az public: // objektum létrejl trejönne // ezért amikor deklaráljuk ljuk alább nem kell argumentumot adni neki (nem ott hozzuk létre) l // A preambulumbeli sorrend lényegtelen. l Az értékadás s a deklarálási sorrend szerint törtt rténik Univerzum(int melyik, int anyag) : azon(melyik), anyag(_anyag) anyag) cout << _azon << ". Big Bang\n"; n"; ~Univerzum() cout << _azon << ". elpusztult\n"; private: const int azon;_ const Anyag anyag;_ ; Univerzum univ1(1,100), univ(2,200);

14 Beágyaz gyazás s III. A beágyaz gyazás s egy "van" neki" " kapcsolat. A létrehozl trehozás s sorrendje: elősz ször r az Univerzum _azon konstansa jön j n létre l és s kap értéket, majd a beágyazott _anyag objektum jön n létre l benne a saját _azon konstansával, aminek semmi köze k az őt t tartalmazó Univerzum objektum azonos nevű konstansához. ez a beágyazott objektum azért lehet konstans, mert értéke nem változik v amíg g a beágyaz gyazó osztály él.

15 Beágyaz gyazás s IV. A megsemmisülés s sorrendje elősz ször r a beágyaz gyazó objektum, az Univerzum pusztul el utána a beágyazott objektum, az Anyag

16 Objektum élettartama Legyen T egy típus t (pl. char, int, Univerzum) Globálisan, lisan, vagy blokkon belül l hozzunk létre l egy T típust pusú változót: t: T t; t A fordító lefoglal a t-nek t megfelelő nagyságú memóri riát (és s lefuttatja T constructor-át, t, ha van neki). Valahányszor t-t t használjuk erre a memóri riára ra hivatkozik a gépi g kódban. k A program (blokk) végén v t automatikusan megsemmisül (destructor-a a lefut).

17 Referenciák T & rt = t; rt egy e referencia t re. Referenciát t csak a definiálása során n végzett v értékadással hozhatunk létre. l Nem változtathatv ltoztatható. A referencia a változv ltozó egy másik m neve (alias). Hasznos függvf ggvényhívásban, ha több t értéket akarunk visszaadni (C-ben erre mutatókat kellene használni): int fuggveny(int i, int &j, int &k); Ez a függvf ggvény 3 értéket ad vissza. A szokásoson soson kívül k l j-t j és k-t t is. Ezek használata függvf ggvényen belül l olyan, mint az ott definiált változv ltozóké lenne.

18 Mutatók T *pt; ez a deklaráci ció egy T típust pusú változóra mutató mutatót (pointert) hoz létre. l A fordító csak egy mutatónyi memóri riát foglal le, ami nem mutat érvényes memória címre! c Használata: Pl. a T t,*ptt *pt; deklaráci ció és pt = & t; értékadás s után t és *pt ugyanaz a változv ltozó A pt = new T; dinamikus memória foglalással (ekkor T construc- tora a is lefut).. A pt t t a program vége v előtt fel kell szabadítani: delete pt; -vel.. (ekkor( a pt által mutatott T objektum destructora is lefut). A pt = new T[sizeT size]; ; dinamikus memória foglalással (T constructora minden elemre lefut).. A pt t t a program vége v előtt fel kell szabadítani: delete [] pt; -vel.. (ekkor( minden elem destructora lefut) Tömböt t csak akkor lehet ily módon m létrehozni, l ha a T osztálynak van argumrntum nélkn lküli li T() constructora.

19 Mutatók k II. Mutatókat csak akkor használjunk, ha nincs más s mód! m Mutatók k használat latának veszélyei: 1. Nem inicializált lt mutatók 2. Felszabadított memóri riára ra mutató mutatók 3. Egy tömb t vége v utánra mutató mutatók 4. Mutatók, amik másra m mutatnak, mint gondolnánk nk 5. Mutatók, amikről l fogalmunk sincs hova mutatnak

20 Mutatók k III. Mutató aritmetika (a C és s C++ előnye): const int size=100; T t, *pt, *p; pt = new T[size]; // pt a size elemű tömb első (0 indexű) ) elemére mutat p = pt; ++p; // p most a pt által mutatott tömb t 2. (1 indexű) ) elemére mutat p = pt + 2; // p a pt által mutatott tömb t 3. (2 indexű) ) elemére mutat Ezek ekvivalensek: *(pt+2) pt[2] Növelő operátor: ++, ill. csökkent kkentő operátor: -- Van előzetes zetes- és s utólagos lagos- verziójuk, ++p és p++,, ill. ++p és p Pl. legyen int a[2] a = 3, 4; és int *pi = &a; ekkor *++pi = 5; 5 után n a = 3, 5 lesz, míg g ehelyett *pi++ = 5 után a = 5,4 lesz.. pip mindkét t esetben a[1]-re fog mutatni.

21 Kitérő: : Mutatók k IV. T const *p; vagy const T *p; p egy mutató ami konstans T objektum(sorozat)ra mutat. T * const p = & t; t p egy konstans mutató,, ami egy T objektumra mutat. Nem lehet megváltoztatni (mintha hivatkozás s lenne). A deklaráci ciójával egyidejűleg kell definiálni is. A p által mutatott értékek megváltoztathat ltoztathatóak. ak. T const * const p = & t; t p is és s az általa mutatott változv ltozó is konstans

22 Leszármaztat rmaztatás Írjuk le az embereket, azaz a férfiakat f és s a nőket. n Minden Ember-nek vannak közös k s tulajdonságai: feje, szeme, szája, stb. Ezért célszerc lszerű az összes Embert egy EMBER osztállyal definiálni. Tudjuk, hogy minden Nő és s Férfi F egyúttal Ember is. Ugyanakkor a férfiaknak f és s nőknek n vannak csak rájuk jellemző tulajdonságaik. Ezért írjuk le a nőket n a NO a Férfiakat F a FÉRFI F osztallyal. Beágyazhatn gyazhatnánk nk minden NO-be és s FERFI-be egy EMBER-t, de ez nem a keresett kapcsolat!! Nem azt akarjuk pl. leírni, hogy "Minden" nőben n van valami" ember,, hanem azt, hogy "Minden" nőn ember".

23 Leszármaztat rmaztatás s II. Próbáljuk meg a definíci ciókat (az ún. interface-t) t) és a megvalósítást/haszn st/használatot különvk nválasztani! Rakjuk az osztálydefin lydefiníciókat külön k n fájlba. f Ennek kiterjesztése se rendszerint.h. ('header' fájl) f Tehát t az alábbi forrás s fájljaink f lesznek: nemek.h az osztálydeklar lydeklarációkkal nemek.cpp a definíci ciók main.cpp ebben van a main() a futtatáshoz Egy bonyolultabb programban több t.h és s.cpp fájl f van. A main() függvf ggvény csak egyben lehet.

24 Leszármaztat rmaztatás s III. A teljes Visual C++ os projekt a Tanszéki honlapról l letölthet lthető és (bővebb) magyarázatokat is tartalmaz A nemek.h fájl f tartalma (ahhoz, hogy ezt a fájlt a fordító értelmezni tudja azután n lehet csak használni, miután n az iostream-et et már m r include-oltuk)

25 nemek.h I. #if!defined(_nemekh) #define _nemekh // feltételes teles fordítási blokk eleje. A blokk vége v (#endif) a nemek.h IV oldalon namespace nemek class SZOVEG // segs egéd d osztály a nevek tárolt rolásához. public: SZOVEG(char txt[] ) _pszoveg = new char[ strlen(txt)+1]; // dinamikus memória a szövegnek és s az azt lezáró \0-nak strcpy(_pszoveg, txt); // szöveg átmásolása a pszoveg-be a záróz 0 karakterrel együtt ~SZOVEG() delete [] _pszoveg; // a lefoglalt t memória felszabadítása sa char const *Szoveg() const return _pszoveg; private: char *_pszoveg; // ez nem lehet konstans ;

26 nemek.h II. class EMBER public: EMBER(char nev[]); ; // a függvf ggvény törzse t máshol m van ~EMBER(); const char *Neve() const return _nev.szoveg(); virtual char *Megszolitasa()=0; // "tisztán n virtuális függvf ggvény" majd csak a leszármaztatott osztályban lesz definiálva. Emiatt EMBER objektumot nem lehet létrehozni minden leszármaztatott osztályban más m s lesz void Koszonti(EMBER &e) ; // Bármilyen B EMBER-t t elfogad protected: // Mintha private: lenne, de a leszámaztatott osztály is látjal const SZOVEG _nev; // az EMBER élete során n nem változikv ;

27 nemek.h III. class FERFI: public EMBER // azaz a FERFI az egy EMBER és s annak minden public és s protected változóját és s módszerm dszerét t eléri public: FERFI(char nev[]): EMBER(nev); ~FERFI() char *Megszolitasa() return "Uram"; ;

28 nemek.h IV. class NO: public EMBER public: NO(char nev[]): EMBER(nev); ~NO() char *Megszolitasa() return "Hölgyem"; ; // A nemek namespace vége // a nemek.h I. oldalon kezdett feltételesen telesen lefordítand tandó blokk végev #endif

29 nemek.cpp #include "stdafx.h" // ez az előre fordított header-ek ek miatt kell. Microsoft specialitás #include <iostream> // ebben van a << definíá íálása using std::cout; using std::endl; // ezután n nem kell pl std::cout -ot írni. Elég g a cout. #include "nemek.h" using namespace nemek; // hogy ne kelljen alább nemek::ferfi-t t használnunk EMBER::EMBER(char nev[]):_nev(nev) cout << _nev.szoveg() << " vagyok "; EMBER::~EMBER() cout << "Viszlát! mondja " << _nev.szoveg() << endl;

30 nemek.cpp II. void EMBER::Koszonti(EMBER &e) cout << "Jó napot " << e.megszolitasa() << "!" << endl; Miután n a Megszólítás() s() virtuális mindíg g a leszármaztatott objektumnak megfelelő hívódik meg. Ha nem az lenne, akkor az EMBER osztály lyé hívódna meg.

31 nemek.cpp III. FERFI::FERFI(char nev[]): EMBER(nev) cout << "és" s férfi." f << endl; NO::NO(char nev[]): EMBER(nev) cout << "és" s nő." n << endl;

32 main.cpp #include "stdafx.h" // ez az előre fordított header-ek ek miatt kell. Microsoft specialitás #include <iostream> // ebben van a << definíá íálása using namespace std; // ezután n nem kell pl std::cout -ot írni. Elég g a cout. #include "nemek.h" // itt definiáltuk az osztályokat egy saját t namespace- en beül using namespace nemek; // hogy ne kelljen alább nemek::ferfi-t használnunk FERFI adam("ádám"); m"); // adam nem csak FÉRFI, F de EMBER is NO eva("éva"); va"); // eva nem csak NO, de EMBER is

33 main.cpp II. // a Koszonti() függvf ggvény EMBER-t t vár, v mégis m 'tudja', hogy FERFI-t t vagy NO-t t köszk szönt int main() cout << " " \n"; adam.koszonti(eva); eva.koszonti(adam); cout << " " \n"; return 0;

34 Leszármaztat rmaztatás IV. A leszármaztat rmaztatás s egy "az" egy" " kapcsolat: a leszármaztatott objektum az egy szülő objektum plusz tulajdonságokkal A leszármaztatott objektum örökli a szülő adat tagjait és s módszereit, m kivéve ve a következk vetkezőket: ket: Constructor és s destructor értékadás s operátora: operator=() friend függvények és s osztályok A leszármaztatott objektum átdefiniálhatja az anyaobjektum módszereitm A leszármaztat rmaztatás s lehet: public, protected, vagy private:

35 Leszármaztat rmaztatás V. Hozzáférés s szabályoz lyozása a leszármaztat rmaztatás s módja m szerint Leszármaztat rmaztatás s módjam class B : public A class B : private A class B:protected A ami A számára public protected private public protected private public protected private az B számára public protected nem hozzáférhet rhető private private nem hozzáférhet rhető protected protected nem hozzáférhet rhető

36 Megjegyzés class A public: void f(); void g(); class B : private A // ez minden A beli public vagy protetced adatból l private-t t csinál // B-ben B [ B nem fér f r hozzá A private tagjaihoz] public: using A::f; // DE az A beli public f() függvf ggvény public lesz B-ben B is // [f után n nincs ()!], miközben g() private függvf ggvénye B-nekB

37 Leszármaztat rmaztatás V. A létrehozl trehozások sorrendje: elősz ször r a szülő objektum jön j n létre l a szokásos sos módon. Ha vannak benne beágyaz gyazások, akkor elősz ször r azok, utána az őket tartalmazó objektum ezután n jön j n létre l a leszármaztatott objektum ugyanilyen módon. m A megsemmisülés s sorrendje a létrehozl trehozás sorrendjének nek a fordítottja.

38 Hibakezelés s I. Programhibák k lekezelésének helyes módszere m a kivétel (exception)) kezelés. A problémás s részeket r egy try blokkba rakjuk Hiba esetén n a try blokkban végrehajtott v függvf ggvény egy kivételt ún. exception-t t dob. Pl. int HibatAdoFuggveny(char szname[]) throw( ) // a throw(...) a függvf ggvény név n v után n azt jelzi, hogy vmilyen // egyelőre határozatlan exception-t t dobhat f = fopen(szname,, "wb" wb"); if(!f (!f) throw FileIOException eio("fájl megnyitási hiba");... return 0; A throw(...) a függvf ggvénynév v után n opcionális. Ha azt akarjuk kifejezni, hogy egy függvény nem dobbhat exception-t t akkor a függvf ggvény neve után n a "..."" argumentum nálkn lküli li throw() t írjunk.

39 Hibakezelés s II. A try blokk után n egy vagy többt catch blokkban kapjuk el a dobott exception-t Pl. try... esetleg hibát okozó függvényhívások... catch (OutOfMemoryException &e) hibakezelés I. // csak OutOfMemoryException típust pusú exception re jön j n ide throw; // ugyanezt az exception-t t továbbk bbküldi catch (...) // minden eddig nem kezelt Exceptionra ide jönj hibakezelés II. // innen nem küldjk ldjük k tovább

40 Operátor túlterhelt lterhelés s (overloading) A C++ ban szinte minden operátor túlterhelhető.. Pl: = + - * / += -= = *= /= == () [] ^ ~ new -> & Nem túlterhelhetőek: ek:.? sizeof Csak olyan túlterhelt lterhelések lehetségesek, amelyekben legalább az egyik paraméter nem beépített típus. t

41 Operátor túlterhelt lterhelés Szintaxis (példa) 1. osztály deklaráci ción n belül: class COMPLEX public: COMPLEX(double r,double i) : real(r), im(i) double real,im; COMPLEX operator+(const COMPLEX &c2) COMPLEX c(0,0); // ez egy lokális lis változv ltozó c.real = real + c2.real; // mert nem akarjuk megváltoztatni c.im =im + c2.im; // az objektumot, amihez hozzáadunk return c; // érték k alapján n adja vissza, ezért nem baj // hogy a lokális lis változv ltozó megsemmisül ;

42 Operátor túlterhelt lterhelés Szintaxis (példa) 1. osztály deklaráci ción kívül class COMPLEX public: COMPLEX(double r,double i) : real(r), im(i) double real,im; ; COMPLEX operator+(complex &c1, const COMPLEX &c2) COMPLEX c(0,0); c.real = c1.real + c2.real; c.im = c1.im + c2.im; return c;

43 Operátor túlterhelt lterhelés Bármelyik használata lata: using namespace std; int main() COMPLEX a(1,-1), 1), b(3,-3); 3); cout << "a: " << a.real << " + " << a.im << "i\n"; cout << "b: " << b.real << " + " << b.im << "i\n"; cout << "a + b= " << (a+b).real << " + " << (a+b).im << "i\n"; cout << "a + b + b= " << (a+b+b).real << " + " << (a+b+b).im << "i\n"; // próbáljuk ki nem lokális lis változv ltozóval az operator+()-ban...

44 Teljesebb példa class COMPLEX public: COMPLEX():_re(0),_im(0) COMPLEX(double re) : _re(re),_im(0) COMPLEX(double re, double im): _re(re), _im(im) COMPLEX &operator=(double i) _re = i; _im = 0; return *this; COMPLEX &operator=(const COMPLEX c) _re = c._re; _im = c._im; return *this; COMPLEX operator+(double i) COMPLEX c; c._re = _re + i; return n c; COMPLEX operator+(const COMPLEX c) COMPLEX t; t._re = _re + c._re; t._im = c._im; ; return t; COMPLEX operator*(const COMPLEX c) COMPLEX t; t._re = _re*c._re -_im*c._im; t._im= _re*c._im+_im*c._re; return t; double Re() return _re; double Im() return _im; private: double _re, _im; ;

45 Template-ek ek Sokszor találunk lunk általános összefüggéseket, illetve feladatokat. Pl. két k t változv ltozó felcserélése: se: void swap(int &i, int &j) int k = i; i = j; j = k; void swap(complex &c1, COMPLEX &c2) COMPLEX c = c1; c1 = c2; c2 = c1; Ez függvény túlterheléssel l is megoldható,, mint itt, de van jobb módszer m is: az általános (generic) osztályok, eljárások a template-ek ek. Ekkor a fordítóprogram generálja a kódot. k

46 Template-ek ek template <class A> swap(a &a, A &b) A c = a; a=b; b = c; Használata lata: int i=3,j=4; swap <int>(i,j); COMPLEX a(1,1),b(2,-3); swap <COMPLEX>(a,b a,b); Megjegyzés: a swap template az std namespace-ben már r definiálva van.

47 Class Template-ek ek Nem csak függvf ggvénynek lehet template-je je, hanem osztályoknak is. Pl: template <class T> class GVECTOR // tetszőlege objektumok tárolására ra alkalmas vektor public: GVECTOR(int mini, int maxi) : _min(mini), _max(maxi), _dim(_max - _min + 1) _v = new T[_dim]; ~GVECTOR() delete [] _v; T &operator[](& operator[](int i) if(i < _min i > _max) throw "index hiba"; return _v[ i - _min];... // további operátorok, private tagok, stb ; A teljes példa p letölthet lthető a tanszéki honlapról. l.

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozás II gyakorlat. 8. Operátor túlterhelés Programozás II gyakorlat 8. Operátor túlterhelés Kezdő feladat Írjunk egy Vector osztályt, amely n db double értéket tárol. A konstruktor kapja meg az elemek számát. Írj egy set(int idx, double v) függvényt,

Részletesebben

Programozás II. 4. Dr. Iványi Péter

Programozás II. 4. Dr. Iványi Péter Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include

Részletesebben

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon 1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (

Részletesebben

Programozás II. 2. Dr. Iványi Péter

Programozás II. 2. Dr. Iványi Péter Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c

Részletesebben

Programozás C++ -ban

Programozás C++ -ban Programozás C++ -ban 4. Bevezetés az osztályokba 4.1 Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több

Részletesebben

Programozás C++ -ban 2007/4

Programozás C++ -ban 2007/4 Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

1. Alapok. Programozás II

1. Alapok. Programozás II 1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph

Részletesebben

Kivételkezelés a C++ nyelvben Bevezetés

Kivételkezelés a C++ nyelvben Bevezetés Kivételkezelés a C++ nyelvben Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Kivételkezelés a C++ nyelvben CPP9 / 1 Hagyományos hibakezelés Függvény visszatérési értéke (paramétere) hátrányai:

Részletesebben

Programozás módszertan

Programozás módszertan Programozás módszertan p. Programozás módszertan Operátorok túlterhelése a C++ nyelvben Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA TANSZÉK Bevezetés Programozás

Részletesebben

Programozás C és C++ -ban

Programozás C és C++ -ban Programozás C és C++ -ban 2. További különbségek a C és C++ között 2.1 Igaz és hamis A C++ programozási nyelv a C-hez hasonlóan definiál néhány alap adattípust: char int float double Ugyanakkor egy új

Részletesebben

C programozási nyelv Pointerek, tömbök, pointer aritmetika

C programozási nyelv Pointerek, tömbök, pointer aritmetika C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek

Részletesebben

Globális operátor overloading

Globális operátor overloading Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal

Részletesebben

Programozás C++ -ban

Programozás C++ -ban 8. Dinamikus objektumok Programozás C++ -ban Ahhoz hogy általános prolémákat is meg tudjunk oldani, szükség van arra, hogy dinamikusan hozhassunk létre vagy szüntethessünk meg objektumokat. A C programozási

Részletesebben

Programozás II gyakorlat. 4. Öröklődés

Programozás II gyakorlat. 4. Öröklődés Programozás II gyakorlat 4. Öröklődés Feladat Egy játékfejlesztő cég olyan programot fejleszt, amely nyilvántartja az alkalmazottai adatait. Tároljuk minden személy: Nevét (legfeljebb 50 karakter) Születési

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök

Részletesebben

Programozás II gyakorlat. 6. Polimorfizmus

Programozás II gyakorlat. 6. Polimorfizmus Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással

Részletesebben

117. AA Megoldó Alfréd AA 117.

117. AA Megoldó Alfréd AA 117. Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

Kivételek, kivételkezelés a C++ nyelvben

Kivételek, kivételkezelés a C++ nyelvben 2009. Kivételek, kivételkezelés a C++ nyelvben Haladó C++ programozás Kurucz Attila ELTE - IK 2009.06.09. Tartalomjegyzék Tartalomjegyzék... 2 Mi a kivételkezelés?... 3 Alapfogalmak... 3 Kivétel... 3 Try

Részletesebben

Programozás C++ -ban 2007/7

Programozás C++ -ban 2007/7 Programozás C++ -ban 2007/7 1. Másoló konstruktor Az egyik legnehezebben érthető fogalom C++ -ban a másoló konstruktor, vagy angolul "copy-constructor". Ez a konstruktor fontos szerepet játszik az argumentum

Részletesebben

4. Öröklődés. Programozás II

4. Öröklődés. Programozás II 4. Öröklődés Programozás II Mielőtt belevágunk Egy Tárgy típusú objektumokat tároló tömb i. elemében tároljunk el egy új tárgyat Rossz módszer: tomb[i].setnev( uj.getnev() ); tomb[i].setertek( uj.getertek()

Részletesebben

Programozás C++ -ban

Programozás C++ -ban Programozás C++ -ban 6. Konstansok A C nyelvben konstansokat makróval is deklarálhatunk. Ebben az esetben mindenhol ahol a makró előfordul a fordító a definiált értéket behelyettesíti a makró helyére.

Részletesebben

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 10. gyakorlat C++: alprogramok deklarációja és paraméterátadása 2011.11.22. Giachetta Roberto groberto@inf.elte.hu

Részletesebben

Programozás s 2. Alapok

Programozás s 2. Alapok Programozás s 2 Objektum Orientált Programozás Alapok utolsó változtatás s 2008.04.12. Alapok A programokat valamilyen "programozási nyelv"-en en írjuk A programozási nyelv formális (szintaktikai) és s

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Programozás II. 6.Öröklés Dr. Iványi Péter

Programozás II. 6.Öröklés Dr. Iványi Péter Programozás II. 6.Öröklés Dr. Iványi Péter 1 Öröklés Programozók lusta emberek, nem szeretnék valamit kétszer leírni Miért veszélyes? Nem hatékony Újra kell tárolni a kódot, újra le kell fordítani Karbantartás

Részletesebben

5. Gyakorlat. struct diak {

5. Gyakorlat. struct diak { Rövid elméleti összefoglaló 5. Gyakorlat Felhasználó által definiált adattípusok: A typedef egy speciális tárolási osztály, mellyel érvényes típusokhoz szinonim nevet rendelhetünk. typedef létező_típus

Részletesebben

Objektumok inicializálása

Objektumok inicializálása Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú

Részletesebben

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma

Részletesebben

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str=zh; str[0]++; Az alábbi feladatokat a AUT.BME.HU tanszéki weboldalon fellelhető AUT C++ Példatárból másoltam ki. A feladatokat a Programozás alapjai 2. ZH-ra való felkészülés jegyében válogattam, a példák nagy részét

Részletesebben

C++ Gyakorlat jegyzet 7. óra

C++ Gyakorlat jegyzet 7. óra C++ Gyakorlat jegyzet 7. óra A jegyzetet Umann Kristóf készítette Horváth Gábor gyakorlata alapján. (2018. április 30.) 0.1. Header fájlra és fordításra egységre szétbontás Ha egy darab header fájlban

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén

Részletesebben

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: C++ referencia Izsó Tamás 2017. február 17. 1. Bevezetés A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: Sokan összetévesztik a pointerrel. Keveset alkalmazzák

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Bevezetés a programozásba Előadás: A const

Bevezetés a programozásba Előadás: A const Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk

Részletesebben

Programozás I. 5. Előadás: Függvények

Programozás I. 5. Előadás: Függvények Programozás I 5. Előadás: Függvények Függvény Egy alprogram Egy C program általában több kisméretű, könnyen értelmezhető függvényből áll Egy függvény megtalálható minden C programban: ez a main függvény

Részletesebben

Programozási Nyelvek: C++

Programozási Nyelvek: C++ Programozási Nyelvek: C++ Gyakorló feladatkönyv Umann Kristóf #include "CppStudent.h" int main() { CppStudent *reader = new CppStudent(); reader->readbook(); while(!reader->doesunderstand()) { reader->exercise();

Részletesebben

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat

Részletesebben

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1 STL gyakorlat C++ Izsó Tamás 2016. május 9. Izsó Tamás STL gyakorlat/ 1 Komponensek kapcsolata Deklarálja az alábbi osztálydiagramon szereplő osztályok közül az A, AA és AB osztályokat! A konstruktorokat

Részletesebben

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés A C programozási nyelv V. Struktúra Dinamikus memóriakezelés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv V. (Struktúra, memóriakezelés) CBEV5 / 1 A struktúra deklarációja 1.

Részletesebben

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

7. fejezet: Mutatók és tömbök

7. fejezet: Mutatók és tömbök 7. fejezet: Mutatók és tömbök Minden komolyabb programozási nyelvben vannak tömbök, amelyek gondos kezekben komoly fegyvert jelenthetnek. Először is tanuljunk meg tömböt deklarálni! //Tömbök használata

Részletesebben

Programozás. C++ típusok, operátorok. Fodor Attila

Programozás. C++ típusok, operátorok. Fodor Attila Programozás C++ típusok, operátorok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. március 4. Deklaráció és definíció C++

Részletesebben

8. gyakorlat Pointerek, dinamikus memóriakezelés

8. gyakorlat Pointerek, dinamikus memóriakezelés 8. gyakorlat Pointerek, dinamikus memóriakezelés Házi ellenőrzés Egy számtani sorozat első két tagja A1 és A2. Számítsa ki a sorozat N- dik tagját! (f0051) Egy mértani sorozat első két tagja A1 és A2.

Részletesebben

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás 5.3. Mutatók,tömbök A mutató vagy pointer olyan változó, amely egy másik változó címét tartalmazza. A C nyelvű programokban gyakran használják a

Részletesebben

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK Sapientia EMTE 2015-16 1 Felülnézet 1 Feltételes fordítás #if, #else, #elif, #endif, #ifdef, #ifndef stb. Felülnézet 2 #include: hatására a preprocesszor

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális

Részletesebben

500. AA Megoldó Alfréd AA 500.

500. AA Megoldó Alfréd AA 500. Programozás alapjai 2. NZH 2010.05.13. gyakorlat: / Hiány:0 ZH:0 MEGOLD IB.027/51. Hftest: 0 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden

Részletesebben

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

C programozás. 6 óra Függvények, függvényszerű makrók, globális és C programozás 6 óra Függvények, függvényszerű makrók, globális és lokális változók 1.Azonosítók A program bizonyos összetevőire névvel (azonosító) hivatkozunk Első karakter: _ vagy betű (csak ez lehet,

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Az Integrált Fejlesztői Környezet C++ alapok Az Integrált Fejlesztői Környezet Visual Studio 2013 Community Edition Kitekintés: fordítás Preprocesszor Fordító

Részletesebben

Osztály és objektum fogalma

Osztály és objektum fogalma Osztály és objektum fogalma A C++ programozási nyelv I. CPP1/ 1 Az osztály (class) class: adatok és módszerek (method) (függvények) együttese, amely absztrakt adattípusként működik. objektum: egy osztály

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 11. előadás 2014.05.12. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Adatszerkezetek

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"

Részletesebben

Programozás alapjai II. (4. ea) C++

Programozás alapjai II. (4. ea) C++ Programozás alapjai II. (4. ea) C++ konstruktor és értékadás, dinamikus szerkezetek Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.03.01. -1-

Részletesebben

Maximum kiválasztás tömbben

Maximum kiválasztás tömbben ELEMI ALKALMAZÁSOK FEJLESZTÉSE I. Maximum kiválasztás tömbben Készítette: Szabóné Nacsa Rozália Gregorics Tibor tömb létrehozási módozatok maximum kiválasztás kódolása for ciklus adatellenőrzés do-while

Részletesebben

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,

Részletesebben

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 8. előadás Strukturált programozás: dinamikus memóriakezelés Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

500. CC Megoldó Alfréd CC 500.

500. CC Megoldó Alfréd CC 500. Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: G1/IB.146 Hiány:3 ZH:7,71 MEGOLD SCH/500. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus

Részletesebben

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout

Részletesebben

Alprogramok, paraméterátadás

Alprogramok, paraméterátadás ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék October 24, 2016 Programozási nyelvek Alprogramok Függvények, eljárások Metódusok Korutinok stb. Alprogramok Alprogram: olyan nyelvi

Részletesebben

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title; PHP5 objektumok 1 Osztályok class, new book.php: construct () destruct() $b=new Book(); törlés: $b=null; vagy unset ($b); -elnevezési konvenciók private $isbn; public $title; function

Részletesebben

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;

Részletesebben

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Öröklés ism. Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 9. gyakorlat Intelligens tömbök, mátrixok, függvények Surányi Márton PPKE-ITK 2010.11.09. C++-ban van lehetőség (statikus) tömbök használatára ezeknek a méretét fordítási időben

Részletesebben

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 10. fejezet Strukturált programozás: dinamikus memóriakezelés Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2015.

Részletesebben

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3 Darvay Zsolt Típusok és nevek a forráskódban Állandók és változók Hatókörök és az előfeldolgozó Bevitel és kivitel Kifejezések Utasítások Mutatók Függvények Struktúrák és típusok Állománykezelés C programozás

Részletesebben

0.2.1 Operátorok túlterhelése (műveletek definiálhatók felhaszn. típusokra) Kutya. Eb1. Eb2. Név (txt): Rex. Blöki. Német juhász 3

0.2.1 Operátorok túlterhelése (műveletek definiálhatók felhaszn. típusokra) Kutya. Eb1. Eb2. Név (txt): Rex. Blöki. Német juhász 3 0 Az objektum-orientáltság 0.1 Objektum fogalma Egy rendszer egyedileg azonosítható szereplője adatokkal és működéssel. Egységbezárás (encapsulation) - viselkedés a külvilág felé - belső struktúra (kívülről

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok

Részletesebben

1.AA MEGOLDÓ BERCI AA 1.

1.AA MEGOLDÓ BERCI AA 1. Programozás alapjai 2. (inf.) 2. zárthelyi 2015.05.07. gyak./lab. hiányzás: 3/2 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat

Részletesebben

Szövegek C++ -ban, a string osztály

Szövegek C++ -ban, a string osztály Szövegek C++ -ban, a string osztály A string osztály a Szabványos C++ könyvtár (Standard Template Library) része és bár az objektum-orientált programozásról, az osztályokról, csak később esik szó, a string

Részletesebben

Programozás s 2. C# nyelven

Programozás s 2. C# nyelven Programozás s 2 Objektum Orientált Programozás C# nyelven utolsó változtatás s 2008.05.02. .NET C# - Microsoft találm lmánya a.net platform számára. A C++ 'továbbfejleszt bbfejlesztése' se'.net hálózaton

Részletesebben

A C programozási nyelv VI. Parancssori argumentumok File kezelés

A C programozási nyelv VI. Parancssori argumentumok File kezelés A C programozási nyelv VI. Parancssori argumentumok File kezelés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv VI. (Parancssori argumentum, file kezelés) CBEV6 / 1 Parancssori

Részletesebben

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Bevezetés a programozásba. 8. Előadás: Függvények 2. Bevezetés a programozásba 8. Előadás: Függvények 2. ISMÉTLÉS Helló #include using namespace std; int main() cout

Részletesebben

Programozás alapjai. 10. előadás

Programozás alapjai. 10. előadás 10. előadás Wagner György Általános Informatikai Tanszék Pointerek, dinamikus memóriakezelés A PC-s Pascal (is) az IBM PC memóriáját 4 fő részre osztja: kódszegmens adatszegmens stackszegmens heap Alapja:

Részletesebben

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés Tartalom D Szoftvertechnológia elıadás Architektúra D vs CORBA Példá 2 1987 Dynamic Data Exchange (DDE) Windows 2.0-ban Windows alkalmazások közötti adatcsere Ma is használatos (pl. vágólap) NetDDE NetBIOS

Részletesebben

Bevezetés a programozásba. 9. Előadás: Rekordok

Bevezetés a programozásba. 9. Előadás: Rekordok Bevezetés a programozásba 9. Előadás: Rekordok ISMÉTLÉS Függvényhívás #include #include #include #include using using namespace namespace std; std; double double terulet(double

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 5. gyakorlat Surányi Márton PPKE-ITK 2010.10.05. C++ A C++ egy magas szint programozási nyelv. A legels változatot Bjarne Stroutstrup dolgozta ki 1973 és 1985 között, a C nyelvb

Részletesebben

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1 Gregorics Tibor Modularizált programok C++ nyelvi elemei 1 Függvények és paraméterátadás A függvény egy olyan programblokk, melynek végrehajtását a program bármelyik olyan helyéről lehet kezdeményezni

Részletesebben

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése FEJLETT PROGRAMOZÁSI NYELVEK, 2009 2. GYAKORLAT - Linux alatti C/C++ programozás Cél: Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Részletesebben

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre. C memóriakezelés Ez a kis segédanyag az adatszerkezetek órán használt eszközök megértését hivatott elősegíteni. A teljesség igénye nélkül kerül bemutatásra a mutató típus és a dinamikus memóriakezelés.

Részletesebben

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,

Részletesebben

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++ Programozás alapjai II. (1. ea) C++ C++ kialakulása, nem OO újdonságok: Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2019.02.05.

Részletesebben

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++ Programozás alapjai II. (1. ea) C++ C++ kialakulása, nem OO újdonságok: Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2019.02.05.

Részletesebben

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,

Részletesebben

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok Számítógépes szimulációk 1. Bevezetés BME Fizika Intézet 2015. szeptember 9. Bevezetés A félév menete C-ismétlés, 1. rész Oktatók: Nagyfalusi Balázs: nagyfalusi@phy.bme.hu, F3 211. : tcsaba@eik.bme.hu,

Részletesebben

Virtuális függvények (late binding)

Virtuális függvények (late binding) Virtuális függvények (late binding) Miskolci Egyetem Általános Informatikai Tanszék Virtuális függvények CPP5 / 1 Azonos nevű függvények megkülönböztetése paraméterszignatúra (függvény overloading) - egy

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 1. rész Osztályok és objektumok Mezık és metódusok Konstruktor és destruktor Névterek és hatókörök Láthatósági szintek Osztály szintő tagok Beágyazott osztályok

Részletesebben

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor. Függvény pointer Több feladat közül futási időben döntöm el, hogy melyiket hajtom végre. A függvényre mutató pointer a függvény kódjának a címére mutat, azon keresztül meghívhatom a függvényt. A pointernek

Részletesebben

ISA szimulátor objektum-orientált modell (C++)

ISA szimulátor objektum-orientált modell (C++) Budapesti Műszaki és Gazdaságtudományi Egyetem ISA szimulátor objektum-orientált modell (C++) Horváth Péter Elektronikus Eszközök Tanszéke 2015. február 12. Horváth Péter ISA szimulátor objektum-orientált

Részletesebben

Programozás 6. Dr. Iványi Péter

Programozás 6. Dr. Iványi Péter Programozás 6. Dr. Iványi Péter 1 Előfeldolgozás része Makrók A forrás kódban elvégzi a helyettesítéseket a fordító Csak egyszer végez helyettesítést Nem olyan makrók, mint a LISP vagy Scheme esetén Csak

Részletesebben

.AA Megoldó Alfréd AA.

.AA Megoldó Alfréd AA. Programozás alapjai 2. (inf.) pót zárthelyi 2013.05.23. gyak. hiányzás: kzh: ZH:0 ABCDEF MEG/200. Hftest: (p) Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:

Részletesebben

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I. Programozási Nyelvek és Fordítóprogramok Tanszék Programozási Nyelvek I. Témák 1 Bevezetés 2 A C++ alapfilozófiája 3 Névterek/namespace-ek 4 Függvények 5 Referenciák C++-ban Motiváció A C és a C++ nyelv

Részletesebben

Bevezetés a programozásba előadás: Öröklődés

Bevezetés a programozásba előadás: Öröklődés Bevezetés a programozásba 2 5. előadás: Öröklődés emlékeztető Tagfüggvény struct koord { double x,y,r; void set(double ux, double uy) { x=ux; y=uy; r=sqrt(x*x+y*y); } Használat: koord k; k.set(4,5); Egységbezárás

Részletesebben

Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe Bevezetés a C++ programozási nyelvbe Miskolci Egyetem Általános Informatikai Tanszék CPP0 / 1 Története A C++ programozási nyelv a C programozási nyelv objektum orientált kiterjesztése. Az ANSI-C nyelvet

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben