Tartalom C áttekintés C++ áttekintés Objektumok közötti kommunikáció. Budapesti Műszaki és Gazdaságtudományi Egyetem. C / C++ áttekintés

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

Download "Tartalom C áttekintés C++ áttekintés Objektumok közötti kommunikáció. Budapesti Műszaki és Gazdaságtudományi Egyetem. C / C++ áttekintés"

Átírás

1 Budapesti Műszaki és Gazdaságtudományi Egyetem C / C++ áttekintés Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter Elektronikus Eszközök Tanszéke augusztus 18. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 1 / 53

2 Tartalom Tartalom A C nyelv áttekintése A C++ nyelv és alapfogalmak áttekintése Objektumok közötti kommunikáció megvalósítása C++-ban Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 2 / 53

3 C áttekintés Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 3 / 53

4 Procedurális programozás Procedurális programozás alapelvek A modellezés alapegységei (tervezési egység) összetartozó adatokból (adatszerkezet, struktúra) és az adatokon elvégezhető műveletekből állnak. A procedurális programnyelvek (pl. C) nyelvi szinten nem támogatják az adatszerkezetek és a rajtuk elvégezhető műveletek egységét. A C nyelv a következőképpen valósítja meg a procedurális programozás alapelemeit: Adatok Beépített adattípusok Felhasználói adattípusok (tömbök, struktúrák) Műveletek: függvények Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 4 / 53

5 Adatszerkezetek Beépített típusok Alaptípusok int: egész, min. 32 bit float: szimpla pontosságú lebegőpontos, min. 32 bit double: dupla pontosságú lebegőpontos, min. 64 bit char: a legkisebb megcímezhető memóriaterület, 8 bit _Bool: kétállapotú típus (C99) Típusminősítők: long, long long, short, unsigned, signed Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 5 / 53

6 Adatszerkezetek Felhasználói típusok Összetartozó adatok tárolására alkalmas komplex adatszerkezetek tömb (array): azonos típusú adatok tárolására struktúra (structure): eltérő típusú adatok tárolására typedef struct core { struct instruction const * pmem ; int * dmem ; struct instruction ir; unsigned ip; _Bool z; _Bool n; int rf [16]; char instruction_code [10]; unsigned destination_index ; unsigned op_a ; unsigned op_b ; int immediate ; int mar ; int mdr ; _Bool run ; core ; int data_memory [256]; structure core my_core ; Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 6 / 53

7 Függvények Függvények I. Önálló programrész, amely valamilyen gyakori feladatot végez A program bármely részéről hívható, lefutása után a végrehajtás a függvényhívás utáni első utasításnál folytatódik Jól definiált interfész paraméterlista visszatérési érték Függvény deklarációja függvény neve visszatérési érték típusa paraméterek típusa Függvény definíciója függvény neve visszatérési érték típusa paraméterek neve és típusa funkció Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 7 / 53

8 Függvények Függvények II. Deklaráció: void core_init ( struct core * the_core, struct instruction const * a_pmem, int * a_dmem ); Definíció: void core_init ( struct core * the_core, struct instruction const * a_pmem, int * a_dmem ) { the_core ->pmem = a_pmem ; the_core ->dmem = a_dmem ; instr_init (&( the_core ->ir )); for ( unsigned i = 0; i < 16; ++i) the_core ->rf[i] = 0; strcpy ( the_core -> instruction_code," -"); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 8 / 53

9 Függvényargumentumok Érték szerinti paraméterátadás Érték szerinti paraméterátadás esetén a függvény hívásakor a paraméterről másolat készül a stack-en. A hívó nem látja a függvény által végrehajtott változtatásokat. Nagy méretű objektumok átadása lassú és memóriaigényes lehet. void add ( int const op_a, int const op_b, int result ) { result = op_a + op_b ; Probléma: A result változóról a híváskor másolat készült, ez a másolat kapja meg az összeg értékét. A függvény tehát így nem működik. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 9 / 53

10 Függvényargumentumok Cím szerinti paraméterátadás Cím szerinti paraméterátadás esetén a függvény hívásakor a paraméternek csak a címe adódik át. A cím szerint átadott változón végrehajtott műveleteket a hívó is látja. void add ( int const op_a, int const op_b, int * result ) { * result = op_a + op_b ; Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 10 / 53

11 Függvényargumentumok Visszatérési érték Ha a függvény eredménye egyetlen objektum, akkor az visszaadható visszatérési értékként. A visszatérési értéket általában hibakód visszaadására használjuk. Vigyázat!: lokális változóra mutató pointer visszaadása! int pmem_read_asm ( char const *path,...) { if (( asm_file = fopen ( path, "r ")) == NULL ) { fprintf ( stderr, " ERROR : file not found!\ n "); return -1; else { while (! end_of_file ) { return 0; Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 11 / 53

12 Modellezés procedurális programozási nyelvekkel Tervezési egyed tipikus felépítése A modellezendő objektumot leíró adatszerkezet A modellezendő objektummal kapcsolatos műveletek typedef struct instruction { unsigned address ; char label [30]; char mnemonic [10]; unsigned destination_index ; unsigned op_a_index ; unsigned op_b_index ; int imm ; char jmp_destination [30]; instruction ; void instr_init ( struct instruction * instr ); void instr_cpy ( struct instruction * dest, struct instruction const * src ); void instr_print ( struct instruction const * instr ); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 12 / 53

13 Modellezés procedurális programozási nyelvekkel Tervezési egyed inicializálása Minden struktúrához tartozik egy inicializáló rutin. Az inicializáló rutint legalább egyszer, a deklaráció után közvetlenül hívjuk! void instr_init ( struct instruction * instr ) { instr -> address = 0; strcpy ( instr -> label, " -"); strcpy ( instr -> mnemonic, " -"); instr -> destination_index = 0; instr -> op_a_index = 0; instr -> op_b_index = 0; instr ->imm = 0; strcpy ( instr -> jmp_destination, " -"); struct instruction recent_instruction ; instr_init (& recent_instruction ); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 13 / 53

14 C++ áttekintés Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 14 / 53

15 OOP alapfogalmak OOP alapfogalmak Osztály Egyformán viselkedő dolgok átfogóan. Másképpen: adatok és a rajtuk értelmezett műveletek egysége. Objektum Egy konkrét valami, amelyik egy osztályba tartozik. Összeadók osztálya Mindegyiknek van A, B, és Cin (átvitel) bemenete. Mindegyiknek van S és Cout kimenete. Mindegyik összeadást csinál. Összeadó objektumok Konkrét példányok az áramkörben. Más bemeneteik vannak, máshova kerül a kimenetük. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 15 / 53

16 OOP alapfogalmak Osztály kódja C++-ban Osztály: class Osztaly { public : int tagvaltozo ; void tagfuggveny ( int param ); ; Példányosítás: Osztaly obj ; int x = 2; obj. tagvaltozo = x; obj. tagfuggveny (3); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 16 / 53

17 OOP alapfogalmak Tagfüggvények Tagfüggvények definíciója: void Osztaly :: tagfuggveny ( int param ) { tagvaltozo = param ; this -> tagvaltozo = param ; A tagfüggvények mindig egy konkrét objektumon dolgoznak. OOP nyelvekben: this me self Az objektum szemszögéből írjuk a programot! Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 17 / 53

18 Öröklődés Öröklődés I. Az OO nyelvek lehetővé teszik, hogy osztályokat származtassunk. A leszármazott osztályok kiterjesztik az alaposztályt, esetleg részben megváltoztatják azt. Így csak az újdonságokat kell leprogramozni. Kevesebb munka! LSP Liskov Substitution Principle. Valami egyfajta valami a gólya egyfajta madár. Az összeadó egyfajta kombinációs hálózat. Polimorfizmus = többalakúság. A gólya madárként viselkedik. Az összeadó kimenetei a bemenetek pillanatnyi értékeitől függenek. A kombinációs hálózatok általában is ilyenek. Osztálykönyvtárakban: egy adott ősosztályból kell származtatnunk a sajátunkat, ezzel illesztjük bele abba a rendszerbe. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 18 / 53

19 Öröklődés Öröklődés II. Alaposztály: class Madar { public : Szarny bal, jobb ; void repul (); ; Leszármazott, rendelkezik az alaposztály tulajdonságaival: class Kakas : public Madar { public : void qqriq (); ; Kakas k; k. qqriq (); k. repul (); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 19 / 53

20 Operátorok Operátorok átdefiniálása I. A saját típusú objektumainkra megadhatjuk, mit jelentsenek a beépített operátorok, pl. +, -, *, / stb. class Tort { public : int sz, n; Tort ( int szaml, int nev ) { sz= szaml ; n= nev ; ; Tort operator *( Tort t1, Tort t2) { return Tort ( t1. sz* t2.sz, t1.n* t2.n); ; Tort t1 (1,2), t2 (3,5); Tort t3 = t1* t2; Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 20 / 53

21 Operátorok Operátorok átdefiniálása II. Mit is csinál a << operátor? Kiírjuk a képernyőre?! std :: ostream & operator <<( std :: ostream & os, Tort t) { os << t. sz << / << t.n; return os; int x; x = 1 << 5; Tort t1 (1, 2); std :: cout << t3; C++ jó szokás: az átdefiniált operátor csinálja azt, amit megszoktunk. Do like the ints do. Ezt gyakran sajnos nem tartják be. A << a nyelvbe épített ellentmondás :) Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 21 / 53

22 Adattag pointerek Adattag pointerek I. Normál pointer Egy konkrét objektumra mutat a memóriában. Önmagában használható. Adattag pointer Valamilyen osztálybeli (összes!) objektumok valamelyik adattagjára mutat. Csak egy konkrét objektumon használható. class Vektor { public : int x, y; ; int Vektor ::* tagptr ; tagptr = & Vektor :: x; Az osztály hozzátartozik a pointer típusához. int Vektor::* jelentése: a Vektor osztályban valamelyik intre mutató pointer. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 22 / 53

23 Adattag pointerek Adattag pointerek II. class Vektor { public : int x, y; v1, v2; int Vektor ::* tagptr ; tagptr = & Vektor :: x; v1.* tagptr = 3; // v1.x=3 v2.* tagptr = 4; // v2.x=4 tagptr = & Vektor :: y; v1.* tagptr = 5; // v1.y=5 v2.* tagptr = 6; // v2.y=6 Az az adattag, amelyikre mutat. Az az objektum, amelyiken használjuk! Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 23 / 53

24 Tagfüggvények pointerei Tagfüggvény pointerek Mint az adattag pointerek, csak tagfüggvényre. A típushoz hozzátartozik minden: a paraméterek, a visszatérési érték típusa; és persze maga az osztály. class Vektor { public : int x; Vektor ( int x_) { x=x_; int szimpla () { return x; int dupla () { return 2* x; ; Vektor v1 (5), v2 (6); int ( Vektor ::* v_fvptr )(); v_fvptr = & Vektor :: szimpla ; std :: cout << (v1.* v_fvptr )() << \n ; // 5 v_fvptr = & Vektor :: dupla ; std :: cout << (v2.* v_fvptr )() << \n ; // 12 Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 24 / 53

25 Tagfüggvények pointerei Callback függvények Callback = visszahívás. Megadunk egy függvényt, amelyet később valaki meghív. Grafikus alrendszer: megadunk egy függvényt, amelyet majd az meghív, amikor a gombra kattintottak. Szimulátor: megadunk egy függvényt, amelyet meghív, amikor egy esemény bekövetkezik. Ez a függvény itt tagfüggvény is lehet, adott objektumon: void SajatObjektum :: fuggveny () {... SajatObjektum s; szimulator. hivd_majd_meg (s, & SajatObjektum :: fuggveny ); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 25 / 53

26 Sablonok Sablonok I. Minták megírunk egy osztályt vagy függvényt úgy nagyjából. Kihagyunk belőle dolgokat. A kihagyott dolgokat, pl. egy típus nevét később megadhatjuk. Ugyanabból a sablonból a fordító legyártja a különféle osztályokat. Kb. search & replace módon csinálja. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 26 / 53

27 Sablonok Sablonok II. Ismerős példa: template <typename TIP > class Tomb { TIP * dintomb ; int meret ; public : Tomb ( int m) { meret = m; dintomb = new TIP [ meret ]; ; Tomb <int > inttomb (10); Tomb <double > doubletomb (20); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 27 / 53

28 Sablonok Sablonok III. Sablonparaméter nem csak típus neve lehet, hanem egy egész szám, és amúgy más típusok is. template <int DIM > class Koordinata { public : double komponensek [ DIM ]; ; Koordinata <2 > a; Koordinata <3 > b; Erről általában lebeszélnek megoldható dinamikus tömbbel is. De most nem programot írunk, hanem hardvert tervezünk! Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 28 / 53

29 Sablonok Sablonok IV. A sablonokból létrehozott konkrét osztályok egymástól teljesen függetlenek, nem kompatibilisek! Hasonlóan viselkednek, de külön típusok. enum Logikai { Nulla, Egy, Lebeg ; template <int SZELES > class Busz { public : Logikai bitek [ SZELES ]; Busz <8> busz1 ; Busz <32> busz2 ; busz1 = busz2 ; Ez jó, mert megvéd minket a hibáktól. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 29 / 53

30 Makrók Makrók I. A C/C++ nyelvekben a fordítás két fő lépése: 1 Előfeldolgozás ilyenkor kezeli a fordító az ún. makrókat, 2 Fordítás ekkor áll elő a programot megvalósító gépi kód. Az előfeldolgozót (preprocesszor) az annak szóló direktívákkal vezéreljük. Tulajdonképpen ezek nem C nyelvű utasítások, más szintaktikai szabályok vonatkoznak rájuk. Példák makró létrehozására: # define PI # define MAX (A,B) ((A) >(B )?( A ):( B)) Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 30 / 53

31 Makrók Makrók II. class Alaposztaly { public : void hello () { std :: cout << " hello "; ; # define LESZARMAZOTT_LETREHOZ ( NEV ) \ class NEV : public Alaposztaly LESZARMAZOTT_LETREHOZ ( Lesz ) { public : int x; ; Paraméteres makrók: nem igazi függvények, csak az előfeldolgozó kezeli őket. Furcsán kinéző dolgokat lehet létrehozni. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 31 / 53

32 Objektumok közötti kommunikáció Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 32 / 53

33 Kommunikáció a procedurális programozás során Kommunikáció a procedurális programozás során Procedurális programozás imperatív vezérlési szerkezetek (feltételes elágazás, ciklusok) felhasználói adatszerkezetek (struktúrák) függvények Bár az adatok és az hozzájuk kapcsolódó algoritmusok elvben itt is egységet alkotnak, ez a kód szintjén nem jelenik meg. A program egy tervezési egysége (modul): 1 a tulajdonságokat, jellemzőket leíró struktúra 2 a struktúrán műveleteket végző függvények Kommunikáció a program egységei között: adatok cseréje, műveletek végeztetése procedurálisan megtörténhet, hogy egy adott modulhoz tartozó függvény közvetlenül olvassa/írja egy másik modul adatait, műveletet végez azokkal ez nehezen áttekinthető függőségi hálót alakít ki egy nagy rendszerben Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 33 / 53

34 Objektum-orientált rendszertervezés Objektum-orientált rendszertervezés Az OOP rendszerek alapeleme az osztály: adatok és műveletek együtt egy objektum állapotát (az őt leíró adatokat) más egység nem értheti el az állapot megváltozása csak kérésre történhet függvényhívások segítségével Ez a tervezési elv zárt, önmagukban mindig konzisztens tervezési egységeket és az egységek között jól definiált kommunikációs felületeket (publikus függvények halmaza) eredményez. Ez hasonló a digitális rendszerekben található kommunikációs portok és protokolok rendszeréhez, ezért az OOP jól alkalmazható nagy digitális rendszerek leírására és modellezésére. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 34 / 53

35 Tartalmazás Tartalmazás Egy osztály adattagként tartalmazhatja egy másik osztály egy példányát. Ekkor nem önálló egységek kapcsolatát modellezzük, hanem egy részegységgel való belső adatcserét. Nyelvi szinten ez azt jelenti, hogy a részegység típusa és a konkrét példány tervezési időben kötött, később csak megváltoztatni lehet, lecserélni nem. class Processor { private : Memory memory ; ; Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 35 / 53

36 Tartalmazás Belső osztály A tartalmazás olyan formában is megvalósulhat, hogy az egyik osztály a másikon belül van definiálva. Ilyenkor a belső osztály eléri a külső privát adattagjait. class Processor { public : class Memory {... ; private : Memory memory ;... ; Ha a belső osztály publikus, az azt jelenti, hogy a külső osztályon kívülről is látható, példányosítható. Egy belső osztályra való hivatkozás a külső segítségével történik: Processor::Memory memory; Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 36 / 53

37 Tartalmazás Hivatkozás referenciával Az elérendő objektumra egy referencia mutat. A két objektum élettartama nincs összekötve, de a annak, amire referenciával hivatkozunk, hamarabb létre kell jönnie. Így a többalakúság már kihasználható az objektum pontos típusa nem kötött. Az elérendő objektumra mutató referenciát a saját objektum létrehozásának pillanatában be kell állítani és utána megváltoztatni nem lehet. class Processor { private : Memory & memory ; public : Processor ( Memory & memory ) : memory ( memory ) {... ; class DualPortMemory : public Memory {...; DualPortMemory dualportmemory ; Processor processor ( dualportmemory ); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 37 / 53

38 Tartalmazás Hivatkozás mutatóval Az elérendő objektumra egy pointer mutat. Kihasználható a többalakúság és bármikor beállítható vagy lecserélhető a hivatkozott objektum. Az objektumok élettartama teljesen független egymástól. class Processor { private : Memory * memory ;... ; Processor processor ; processor. setmemory (& dualportmemory );... processor. setmemory (& singleportmemory ); Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 38 / 53

39 Tartalmazás Kétirányú kommunikáció I. Tartalmazás esetén a tartalmazott objektum nem tudja elérni a külsőt, így csak egyirányú lehet a kapcsolat. Referenciával és pointerrel való hivatkozás esetén megoldható, hogy mindkét osztályban legyen egy hivatkozás a másikra. Core.h USART.h # include " USART.h" # include " Core.h" class Core { private : USART usart ; char r e g i s t e r s [ ] ; public : void sendbyte ( char byte ) { usart >send ( byte ) ; void b y t e R e c e i v e d ( char b y t e ) { r e g i s t e r s [ 0 ] = b y t e ; ; class USART { private : Core core ; public :... void r e c e i v e ( ) { char data =... core >b y t e R e c e i v e d ( data ) ; ; GOND: a kereszthivatkozás így nem oldható meg, hiszen ez rekurzív fejlécállomány-hivatkozást okozna! Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 39 / 53

40 Tartalmazás Kétirányú kommunikáció II. Amennyiben egy külső fájlban definiált típusra csak mutató vagy referencia hivatkozik, akkor a fordítónak nem kell ismernie az adott típust, hiszen ilyenkor csak egy memóriacím kerül a hivatkozás helyére. Ha egy adott objektumnak hivatkozunk adattagjára vagy tagfüggvényére, akkor ismerni kell a típus deklarációját. Megoldás: 1 Az osztály fejlécállománya csak az a típusdefiníciót tartalmazza, a tagfüggvények definícióját ne (azokét semmiképpen, amikben a hivatkozott objektum tagfüggvényeit hívjuk). 2 Csak a metódusdefiníciókat tartalmazó fájlba szerkesszük be a másik típus fejlécállományát. 3 A fejlécállományokban a hivatkozott osztály(oka)t csak elődeklaráljuk. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 40 / 53

41 Tartalmazás Kétirányú kommunkáció III. A fejlécek Core.h USART.h class USART ; class Core { private : USART * usart ; char registers [256]; public : void sendbyte ( char byte ); void bytereceived ( char byte ); ; class Core ; class USART { private : Core * core ; public : void send ( char byte ); void receive ( char byte ); ; Az egyes fejlécállományok csak elődeklarálják a hivatkozott osztályokat. A kódban az adott típus csak mutató/referencia deklarációkban szerepel. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 41 / 53

42 Tartalmazás Kétirányú kommunkáció IV. A tagfüggvények definíciói Core.cpp # include " USART.h" void Core :: sendbyte ( char byte ) { usart ->send ( byte ); void Core :: bytereceived ( char byte ) { registers [0] = byte ; USART.cpp # include " Core.h" void USART :: send ( char byte ) {... void USART :: receive ( char byte ) { char data =... core -> bytereceived ( byte ); A definíciós fájlok beszerkesztik a hivatkozott osztályok fejléceit. Így az adott típus teljes ismeretében már történhetnek tagfüggvényhívások. Nincsen rekurzív beszerkesztés, hiszen a beszerkesztett fájlok nem tartalmaznak már visszahivatkozó include-ot. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 42 / 53

43 Tartalmazás Minimális függőség kialakítása függvénymutatók I. Előfordulhat, hogy egy osztály ugyanazt a hívást sokféle objektum felé meg szeretné tenni, ám ezeknek nincs közös őse. Tervezési elv is lehet, hogy csökkentve a függőségeket az osztályok között, nem hozunk létre közös őst egy (kevés) azonos aláírású függvény miatt. Megoldás: függvénymutatók bejegyzése az osztályokban. Egy függvénymutató egy egyszerű memóriacím, ahol egy adott aláírású függvény kódja kezdődik. Probléma: a tagfüggvényeknél ennél bonyolultabb a helyzet. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 43 / 53

44 Tartalmazás Minimális függőség kialakítása függvénymutatók II. Egy globális függvényre mutató pointer deklarációja: int (*fptr)(int) Ez a függvény tetszőleges olyan globális függvényre mutathat, ami egy int-et vár paraméterként és int a visszatérési értéke. A függvényhívás rajta keresztül pedig ugyanolyan, mintha egy egyszerű függvényt hívnánk: a függvényhívó operátort használjuk. int f( int i) { return 2 * i; int main () { int (* fptr )( int ) = f; std :: cout << fptr (5) << std :: endl ; return 0; Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 44 / 53

45 Tartalmazás Minimális függőség kialakítása függvénymutatók III. A tagfüggvényeknél a problémát az jelenti, hogy van egy implicit paraméterük a this pointer. Ennek helyére automatikusan behelyettesítődik a hívó objektum címe a tagfüggvényhíváskor: obj.tfv(5) Osztaly::tfv(&obj, 5) Ezért ha egyszerűen eltároljuk egy tagfüggvény címét, akkor még nem tudjuk meghívni, hiszen mindenképpen szükség van egy objektumra. Egy tagfüggvénymutatót csak objektummal együtt tárolhatunk el. Osztaly * objektum ; int ( Osztaly ::* tagfuggveny )( int ); Hívás: objektum->*tagfuggveny(5) Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 45 / 53

46 Tartalmazás Minimális függőség kialakítása függvénymutatók IV. Két probléma van: 1 a globális függvényekre és a tagfüggvényekre létrehozott mutatókat eltérően kell kezelni 2 a tagfüggvénymutatók típusa tartalmazza az osztályt, így nem tudunk osztályfüggetlen mutatót készíteni A megoldáshoz segítségül hívjuk a többalakúságot és a sablonokat. Elsődleges célunk az lesz, hogy többféle osztály tagfüggvényeit is be tudjuk jegyezni, de a bemutatott módszer lehetővé teszi a globális függvények használatát is. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 46 / 53

47 Tartalmazás Minimális függőség kialakítása függvénymutatók V. Mivel összetett viselkedést kell megvalósítani, osztályokat érdemes készíteni. Mivel kétféle viselkedésre van szükségünk, kell egy közös ős. Függvényhívást szeretnénk megvalósítani, ezért a közös tulajdonság az lesz, hogy függvényként hívható osztályaink lesznek. Ebben a példában egyféle függvényaláírást fogunk tudni kezelni. class base_function { public : virtual void operator ()( int ) const = 0; virtual ~ base_function () { ; A virtuális függvény feladata az egyes osztályokban az lesz, hogy a függvényhívást delegálja a megfelelő, mutatóval hivatkozott függvényhez/tagfüggvényhez. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 47 / 53

48 Tartalmazás Minimális függőség kialakítása függvénymutatók VI. Az globális függvények becsomagolása nagyon egyszerű: class plain_function : public base_function { private : void (* fptr )( int ); public : plain_function ( void (* fptr )( int )) : fptr ( fptr ) { ; virtual void operator ()( int i) const { fptr (i); Az osztály eltárol egy függvénypointert és a függvényhívó operátor által átvett értékkel meghívja a hivatkozott függvényt. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 48 / 53

49 Tartalmazás Minimális függőség kialakítása függvénymutatók VII. Tagfüggvények esetén ugyanez a feladat, csak ott egy objektumot és egy tagfüggvénymutatót kell eltárolni. template < typename T> class member_function : public base_function { private : T * object ; void (T ::* method )( int ); public : member_function (T * object, void (T ::* method )( int )) : object ( object ), method ( method ) { ; virtual void operator ()( int i) const { ( object - >* method )(i); Annak érdekében, hogy tetszőleges osztály tagfüggvényét el tudjuk tárolni, sablon-osztályt készítünk. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 49 / 53

50 Tartalmazás Minimális függőség kialakítása függvénymutatók VIII. Abban az osztályban, ahol a hivatkozásokat el szeretnénk helyezni, kell egy base_function mutató adattag, ami mindig a bejegyzett függvényt becsomagoló, dinamikusan létrehozott objektumra mutat. class module { private : base_function * registered_function ; public : module () : registered_function (0) { ~ module () { delete registered_function ;... void do_something ( int i) { std :: cout << " Calling registered function : "; (* registered_function )(i); ; A do_something metódus hívja meg az ős virtuális függvényén keresztül a megfelelő csomagoló osztályt, ami delegálja a hívást a tényleges függvényhez. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 50 / 53

51 Tartalmazás Minimális függőség kialakítása függvénymutatók IX. Készíteni kell egy-egy beregisztráló metódust globális függvényekhez és tagfüggvényekhez.... void register_function ( void (* fptr )( int )) { delete registered_function ; registered_function = new plain_function ( fptr ); template < typename T> void register_function (T * object, void (T ::* method )( int ) ) { delete registered_function ; registered_function = new member_function <T>( object, method );... Ezek lehetnek azonos nevűek, hiszen a függvények túlterhelhetősége ezt megengedi és mivel ugyanazt a feladatot látják el, ez logikus is. Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 51 / 53

52 Tartalmazás Minimális függőség kialakítása függvénymutatók X. Az osztály használata: class entity { public : void f( int i) { std :: cout << (i * 2) << std :: endl ; ; void fun ( int i) { std :: cout << " fun : " << i << std :: endl ; int main () { module m; m. register_function ( fun ); m. do_something (5) ; entity e; m. register_function (&e, & entity :: f); m. do_something (5) ;... Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 52 / 53

53 Tartalmazás Minimális függőség kialakítása függvénymutatók XI. Tovább bonyolíthatja a helyzetet, ha tetszőleges aláírású függvény bejegyzését szeretnénk lehetővé tenni. Erre a problémára a C++98 szabvány szerint csak meglehetően körülményes megoldást lehetett adni. A C++11 szabvány óta létezik szabványos függvény-csomagoló: az std::function. A fent bemutatott módszert használják a C++-ban eseménykezelésre. A SystemC TLM-ben is hasonló módon oldják meg a küldők és fogadók közötti kommunikációt (erről később lesz szó). Dr. Czirkos Zoltán, Nagy Gergely, Horváth Péter C / C++ áttekintés 53 / 53

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

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

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

Már megismert fogalmak áttekintése

Már megismert fogalmak áttekintése Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak

Részletesebben

Bevezetés, a C++ osztályok. Pere László

Bevezetés, a C++ osztályok. Pere László Programozás módszertan II. p. Programozás módszertan II. Bevezetés, a C++ osztályok Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉ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

C++ programozási nyelv

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

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

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

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

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

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

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

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

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe Mechatronika és mikroszámítógépek 2017/2018 I. félév Bevezetés a C nyelvbe A C programozási nyelv A C egy általános célú programozási nyelv, melyet Dennis Ritchie fejlesztett ki Ken Thompson segítségével

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Mintavételes szabályozás mikrovezérlő segítségével

Mintavételes szabályozás mikrovezérlő segítségével Automatizálási Tanszék Mintavételes szabályozás mikrovezérlő segítségével Budai Tamás budai.tamas@sze.hu http://maxwell.sze.hu/~budait Tartalom Mikrovezérlőkről röviden Programozási alapismeretek ismétlés

Részletesebben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

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

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

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} }; A C++ kódokban lévő makrókat melyik egység dolgozza fel az alábbiak közül? preprocessor A szabványos C++-ban nem is írhatunk makrókat (csak C-ben) assembler linker Az alábbi példában a Foo f(5); konstruktor

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

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Bánsághi Anna 2014 Bánsághi Anna 1 of 33 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív

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

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

Programozás I. - 11. gyakorlat

Programozás I. - 11. gyakorlat Programozás I. - 11. gyakorlat Struktúrák, gyakorlás Tar Péter 1 Pannon Egyetem M szaki Informatikai Kar Rendszer- és Számítástudományi Tanszék Utolsó frissítés: November 16, 2009 1 tar@dcs.vein.hu Tar

Részletesebben

Programozási alapismeretek 4.

Programozási alapismeretek 4. Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)

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

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

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

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

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

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

Bevezetés a Python programozási nyelvbe

Bevezetés a Python programozási nyelvbe Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban

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

Interfészek. PPT 2007/2008 tavasz.

Interfészek. PPT 2007/2008 tavasz. Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált

Részletesebben

OOP. Alapelvek Elek Tibor

OOP. Alapelvek Elek Tibor OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció 1. Öröklés Az objektum orientált tervezés fontos sarkköve, az osztályok viszonyainak a megtervezése. 1.1. Rétegelés c l a s s Address {..... c l a s s Name {..... c l a s s P e r s o n { Name name ; Address

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

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

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor. Eseménykezelés előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Függvénymutatókkal Származtatással Interfészekkel Egyéb

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

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek JAVA EA+GY 1. gyakolat Programozási nyelvek JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2018/2019. tavaszi félév Tartalom 1 A Java alapjai 2 Java program

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

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

1. Bevezetés A C++ nem objektumorientált újdonságai 3

1. Bevezetés A C++ nem objektumorientált újdonságai 3 Előszó xiii 1. Bevezetés 1 2. A C++ nem objektumorientált újdonságai 3 2.1. A C és a C++ nyelv 3 2.1.1. Függvényparaméterek és visszatérési érték 3 2.1.2. A main függvény 4 2.1.3. A bool típus 4 2.1.4.

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

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

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

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

Bánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31

Bánsághi Anna anna.bansaghi@mamikon.net. 2014 Bánsághi Anna 1 of 31 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 9. ELŐADÁS - OOP TERVEZÉS 2014 Bánsághi Anna 1 of 31 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív paradigma

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

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 Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

JAVA PROGRAMOZÁS 2.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,

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

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4 1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4 2) Hány byte-on tárol a C++ egy float-ot? implementáció-függő 6 4 8 3) Hány byte-on tárol a C++

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

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok

Részletesebben

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1 Gregorics Tibor Tanácsok modularizált programok készítéséhez 1 Modularizált programon azt értjük, amely több, jól körülhatárolható részfeladat megoldásaiból épül fel. Egy-egy részfeladat gyakran szabványos

Részletesebben

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2) Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?

Részletesebben

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit

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

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

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

OOP #1 (Bevezetés) v1.0 2003.03.07. 18:39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

OOP #1 (Bevezetés) v1.0 2003.03.07. 18:39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. OOP #1 (Bevezetés) v1.0 2003.03.07. 18:39: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_01-1 - E jegyzet másolata

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. március 3. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja Miért

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Óbudai Egyetem. C programozási nyelv

Óbudai Egyetem. C programozási nyelv Óbudai Egyetem Kandó Kálmán Villamosmérnöki Kar C programozási nyelv Struktúrák és Unionok Dr. Schuster György 2016. október 6. Óbudai Egyetem Kandó Kálmán Villamosmérnöki Kar C programozási 2016. októbernyelv

Részletesebben

C++ programozási nyelv Struktúrák a C++ nyelvben

C++ programozási nyelv Struktúrák a C++ nyelvben C++ programozási nyelv Struktúrák a C++ nyelvben 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/37 Bevezetés A

Részletesebben

C programozási nyelv

C programozási nyelv C programozási nyelv Struktúrák Dr Schuster György 2011 június 16 Dr Schuster György () C programozási nyelv Struktúrák 2011 június 16 1 / 11 Struktúrák Struktúrák A struktúra egy olyan összetett adatszerkezet,

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is

Részletesebben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás Programozás BMEKOKAA146 Dr. Bécsi Tamás 5. előadás Tömbök átméretezése public static void Resize( ref T[] array, int newsize ) Példa: int[] a=new int[20]; Array.Resize(ref a, 22); 2016. 10. 19.

Részletesebben

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016 Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS 2015-2016 Objektumorientált programozás OOP PHP-ben 2 A PHP az 5.0-as verziójától megvalósítja az OO eszközrendszerét OO eszközök:

Részletesebben

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok Bevezetés a programozásba II 8. Előadás: Osztályok, objektumok, osztályszintű metódusok vektor.h #ifndef VEKTOR_H #define VEKTOR_H class Vektor { int meret, *mut; public: Vektor(int meret); int szamlal(int

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 II. Utasítások. A függvény.

A C programozási nyelv II. Utasítások. A függvény. A C programozási nyelv II. Utasítások. A függvény. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv II (Utasítások, fuggvények) CBEV2 / 1 Kifejezés utasítás Kifejezés utasítás, blokk

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

Fejlett programozási nyelvek C++ Iterátorok

Fejlett programozási nyelvek C++ Iterátorok Fejlett programozási nyelvek C++ Iterátorok 10. előadás Antal Margit 2009 slide 1 Témakörök I. Bevezetés II. Iterátor definíció III. Iterátorok jellemzői IV. Iterátorkategóriák V. Iterátor adapterek slide

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

Java programozási nyelv

Java programozási nyelv Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék

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

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

S0-02 Típusmodellek (Programozás elmélet)

S0-02 Típusmodellek (Programozás elmélet) S0-02 Típusmodellek (Programozás elmélet) Tartalom 1. Absztrakt adattípus 2. Adattípus specifikációja 3. Adattípus osztály 4. Paraméterátadás 5. Reprezentációs függvény 6. Öröklődés és polimorfizmus 7.

Részletesebben

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök Dr. Bécsi Tamás 4. Előadás A?: operátor Nézzük meg a következő kifejezést: if (a>b) z=a; else z=b; Ez felírható

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

Felhasználó által definiált adattípus

Felhasználó által definiált adattípus Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési

Részletesebben

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o Miért Java? széleskörben elterjedt Micro Edition - beágyazott rendszerek, régi telefonok Standard Edition - PC, android ezen alapul Enterprise Edition - vállalati programok, web service-ek multiplatform

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

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi. 11. gyakorlat Sturktúrák használata I. Új típus új műveletekkel 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi. typedef struct datum { int ev; int ho; int nap;

Részletesebben

C programozási nyelv

C programozási nyelv C programozási nyelv Előfeldolgozó utasítások Dr Schuster György 2011 május 3 Dr Schuster György () C programozási nyelv Előfeldolgozó utasítások 2011 május 3 1 / 15 A fordítás menete Dr Schuster György

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

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés) Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban

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