Bevezetés a C++ programozási nyelvbe

Hasonló dokumentumok
Bevezetés a C++ programozási nyelvbe

A C programozási nyelv II. Utasítások. A függvény.

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei

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

C++ programozási nyelv Konstruktorok-destruktorok

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

A C programozási nyelv IV. Deklaráció és definíció

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

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

Objektumok inicializálása

OOP #14 (referencia-elv)

A C programozási nyelv III. Pointerek és tömbök.

A C programozási nyelv III. Pointerek és tömbök.

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

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

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

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

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)

8. gyakorlat Pointerek, dinamikus memóriakezelés

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

és az instanceof operátor

1. Jelölje meg az összes igaz állítást a következők közül!

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

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

5. Gyakorlat. struct diak {

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

A C# programozási nyelv alapjai

Algoritmizálás + kódolás C++ nyelven és Pascalban

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Készítette: Nagy Tibor István

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

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

Programozás C és C++ -ban

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

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

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Informatika terméktervezőknek

C programozás. 1 óra Bevezetés

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

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

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:

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

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

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

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Occam 1. Készítette: Szabó Éva

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

Java programozási nyelv

1. Alapok. Programozás II

Algoritmizálás és adatmodellezés tanítása 1. előadás

A programozás alapjai 1 Rekurzió

Programozás I gyakorlat

A programozás alapjai

A JavaScript főbb tulajdonságai

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

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

A C++ szigorúbban kezeli a típuseltéréseket, mint a C nyelv Lehetséges típuskonverziók:

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

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

Pénzügyi algoritmusok

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

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.

Pénzügyi algoritmusok

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

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 I gyakorlat

Programozas 1. Strukturak, mutatok

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

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

C++ programozási nyelv

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

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

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

Rekurzió. Dr. Iványi Péter

Alprogramok, paraméterátadás

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

Maximum kiválasztás tömbben

Kifejezések. Kozsik Tamás. December 11, 2016

Programozás I gyakorlat. 10. Stringek, mutatók

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

Java programozási nyelv 4. rész Osztályok II.

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

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Apple Swift kurzus 3. gyakorlat

Vezérlési szerkezetek

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

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Mutatók és mutató-aritmetika C-ben március 19.

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

3. Osztályok II. Programozás II

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Átírás:

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 - néhány megszorítással - valódi részhalmazaként tartalmazza. Első implementáció: AT&T Bell Labs, Bjarne Stroustrup, a nyolcvanas évek eleje. Ez egy pre-compiler volt, amely a C++ kódot C kódra fordította, ami aztán a szokásos C fordítóval volt feldolgozható. Bevezetés a C++ programozási nyelvbe CPP0 / 2

Története (folyt.) ANSI szabványtervezet: 1996. december 2. A hivatalos szabvány szám: ISO/EIC 14882. Általánosan elterjedt programozási nyelv Gyakorlatilag minden architektúra támogatja Számos előre definiált osztálykönyvtár Sok fejlesztőeszköz épül erre a nyelvre Bevezetés a C++ programozási nyelvbe CPP0 / 3

Használatának módjai funkcionális szemléletű programok készítésére, kényelmi szolgáltatásokkal ellátott C nyelvként az osztály és objektum használata nélkül funkcionális szemléletű programok készítésére, tetszőleges típusokkal bővíthető nyelvként kihasználva a C++ szinte valamennyi nyelvi konstrukcióját objektum orientált szemléletű programok implementálására Bevezetés a C++ programozási nyelvbe CPP0 / 4

Nem objektum orientált kiterjesztések Nem igénylik az osztály fogalmát. Új vagy módosított szabályok vonatkoznak az alábbiakra megjegyzés definíció hivatkozás típus felsorolás, struktúra és unió típusú objektumok típuskonverzió dinamikus memóriakezelés új alaptípusok függvényekre vonatkozó kiterjesztések Bevezetés a C++ programozási nyelvbe CPP0 / 5

Megjegyzés (comment( comment) A // (dupla törtvonal) olyan megjegyzés elejét jelzi, amelynek a vége a következő sorváltás karakter. Bárhol alkalmazható. Bevezetés a C++ programozási nyelvbe CPP0 / 6

A definíció A definíció végrehajtható utasításnak számít, így bárhol előfordulhat, ahol utasítás írható. Alapszabályként a definiált objektum hatásköre a definíciótól az azt magában foglaló blokk végéig terjed. Kivétel a for utasításban foglalt első két kifejezésben az if, while és switch utasítások feltételében deklarált azonosítók ezen utasításokra nézve lokálisak Bevezetés a C++ programozási nyelvbe CPP0 / 7

A definíció (folyt.) Példa a kivételre: for (int index=1; index<8; index++) { printf ("%d ",index); char betu = index+65; printf ("%c\n",betu); } betu index betu és index egyaránt lokális a ciklusmagra nézve Bevezetés a C++ programozási nyelvbe CPP0 / 8

A definíció (folyt.) Az index az őt tartalmazó kifejezés kiértékelésekor létrejön, és a ciklusból való kilépéskor megszűnik Mivel a betu definíciója ténylegesen a ciklusmag belsejében van, így a ciklusmag minden végrehajtásakor létrejön, a végén pedig megszűnik Megjegyzések: A most hatályos szabvány előtt nem létezett ez a kivétel! A kétféle értelmezés között kapcsolókkal lehet választani. Nem egységes a fordítók alapértelmezése! Bevezetés a C++ programozási nyelvbe CPP0 / 9

Hivatkozás típus C: minden alaptípusból pointer típus származtatható C++ : minden típusból hivatkozás típus is származtatható Formája: típusnév & A hivatkozás valamely objektum alternatív neveként szerepel, mindig kötelező tehát inicializálni. Bevezetés a C++ programozási nyelvbe CPP0 / 10

Hivatkozás típus (folyt.) Egy hivatkozás típusú változó szabályos definíciója például: int valt; int& masik = &valt; A hivatkozás típust a leggyakrabban a függvény paraméterének és visszatérési értékének típusaként használjuk. A hivatkozás típus címet tárol de értékként (indirekció nélkül) hivatkozhatunk rá. Bevezetés a C++ programozási nyelvbe CPP0 / 11

Felsorolás, s, struktúra ra, unió típusú objektumok deklarálása A C++ a fenti típusú objektumok deklarálása esetén nem követeli meg a deklarációban az enum, struct illetve union kulcsszavak alkalmazását, az adatszerkezetek deklarációjában szereplő nevek önmagukban típusnévként használhatók Bevezetés a C++ programozási nyelvbe CPP0 / 12

Felsorolás, s, struktúra ra, unió típusú objektumok deklarálása (folyt.) Példa: struct datum { int ev; char honap[15]; int nap; }; // a "struct" alapszó elmaradhat datum ma,holnap,szulinap; Bevezetés a C++ programozási nyelvbe CPP0 / 13

Típuskonverzió A cast stílusú típuskonverzió helyett használható az alábbi forma is: típusnév(kifejezés) Tehát pl. (char)a helyett char(a) is írható A két forma keverhető egy programon belül. Bevezetés a C++ programozási nyelvbe CPP0 / 14

Dinamikus memóriakezel riakezelés A C programokban megszokott memóriakezelő függvények (malloc(), free() és társai) helyett a C++ két új operátort vezet be: new delete Bevezetés a C++ programozási nyelvbe CPP0 / 15

A new operátor Formája: new típusnév vagy new típusnév[elemek száma] Az operátor a típusnév (és ha adott, az elemek száma) által meghatározott méretű helyet kísérel meg lefoglalni a memóriában Ha sikeres volt a művelet, eredménye egy típusnev* típusú érték, amely a lefoglalt terület kezdőcímét adja, egyébként az eredmény 0. Bevezetés a C++ programozási nyelvbe CPP0 / 16

A new operátor (folyt.) Egyszerű példák: // helyfoglalás egy egész értéknek int *p=new int; // helyfoglalás egy 200 elemű egész // tömbnek int *pp; pp = new int[200]; Bevezetés a C++ programozási nyelvbe CPP0 / 17

A delete operátor Egy objektum törlése és az általa elfoglalt hely felszabadítása a memóriából: delete pointer; Egy tömb törlése: delete [] pointer; Csak a new operátorral értéket kapott pointerrel alkalmazható, egyébként az eredménye definiálatlan. Bevezetés a C++ programozási nyelvbe CPP0 / 18

A delete operátor (folyt.) A NULL pointerre alkalmazva hatástalan. Tömb törlése az egyszerű formájú operátorral, vagy egy objektum törlése a tömbökre vonatkozó formával definiálatlan hatású. Bevezetés a C++ programozási nyelvbe CPP0 / 19

Az ANSI-C C helyfoglaló függvényei A C++ ismeri az ANSI-C helyfoglaló függvényeit is, tehát (elsősorban kompatibilitási okokból) azok is használhatóak. Tilos azonban a két allokációs mechanizmus együttes alkalmazása egy programon belül: ennek hatása definiálatlan. Bevezetés a C++ programozási nyelvbe CPP0 / 20

A bool alaptípus pus Az alaptípus logikai értékek tárolására szolgál Értéke igaz (nem 0) vagy hamis (0) lehet A C++ nyelvben a logikai kifejezések végeredménye bool típusú. Integrális típus Ha szükséges, egy bool típusú érték a C konvenció értelmében a 0 vagy 1 értékre, egy egész érték pedig 0 esetén a hamis, nem 0 esetén az igaz értékre konvertálódik. Bevezetés a C++ programozási nyelvbe CPP0 / 21

A wchar_t alaptípus pus Az egy byte-nál hosszabb kódú karaktereket alkalmazó karakterkészletek egy elemét tárolni képes típus. Szintén integrális típus. Bevezetés a C++ programozási nyelvbe CPP0 / 22

Hivatkozás s (cím) szerinti paraméter terátadás Az adott formális paramétert hivatkozási típusúnak kell deklarálni Az aktuális paraméter kompatibilis típusú balérték A hivatkozás szerinti paraméternek a címe adódik át A függvényben nem kell indirekciót alkalmazni a változó értékének elérésére. Ha a függvény értékadást tartalmaz a formális paraméterrre, akkor azzal az aktuális paraméterének az értékét is megváltoztatja. Bevezetés a C++ programozási nyelvbe CPP0 / 23

Hivatkozás s szerinti paraméter terátadás (példa) void csere (int &a, int &b) { int i; i=a; a=b; b=i; } main() {int a=5, b=10; csere (a,b); printf ("%d %d\n",a,b); } Bevezetés a C++ programozási nyelvbe CPP0 / 24

Alapértelmez rtelmezés s szerinti paraméter érték 1. Ha egy formális paraméterhez = jellel egy kifejezést kapcsolunk, az a paraméter híváskor elmaradhat, de a kifejezésnek megfelelő kezdőértéket veszi fel. Az alapértelmezés szerinti paraméterérték megadása formálisan is egy inicializálásnak felel meg. Bevezetés a C++ programozási nyelvbe CPP0 / 25

Alapértelmez rtelmezés s szerinti paraméter érték 2. Szabályok: Ha egy paraméternek van alapértelmezés szerinti (default) értéke, akkor az utána következő valamennyi paraméternek kell legyen. A kifejezés értékének típusa a paraméter típusával kompatibilis kell legyen. Egy adott paraméter default értékét vagy a prototípusban, vagy a definícióban kell megadni, mindkét helyen tilos! Bevezetés a C++ programozási nyelvbe CPP0 / 26

Alapértelmez rtelmezés s szerinti paraméter érték 3. Szokásos eljárás, hogy valamennyi default értéket a prototípusban adunk meg, hiszen az mindig publikus, a függvény definíció pedig nem mindig az. A kifejezés kiértékelése a hívás során futási időben történik. Default értékkel nem rendelkező formális paraméter helyére kötelező aktuális paramétert írni. Bevezetés a C++ programozási nyelvbe CPP0 / 27

Alapértelmez rtelmezés s szerinti paraméter érték 4. Egy példa: int kobtart (int hossz, int szel=3, int mag=5); main () {int x=10, y=12, z=2, k; k = kobtart (x,y,z); k = kobtart (x,y); //k=kobtart(x,y,5) k = kobtart (x); //kobtart(x,3,5) k = kobtart (); // Ez hibás! } Bevezetés a C++ programozási nyelvbe CPP0 / 28

Az inline függvény Egy függvényt a deklarációjában az inline minősítővel láthatunk el Ezzel feljogosítjuk a fordítóprogramot arra, hogy a függvény hivását a definícióból és az aktuális paraméterekből készített kódsorozattal helyettesítse. Az inline függvény függvény törzse annyiszor kerülhet bemásolásra a kódba, ahányszor a hívása szerepel. Bevezetés a C++ programozási nyelvbe CPP0 / 29

Az inline függvény (folyt.) Mire lehet jó? A C++-ban gyakori a nagyon rövid függvénytörzs. Ilyenkor a hívás helyén történő kódgenerálás rövidebb kódot eredményezhet, mint a paraméterátadás adminisztrálása és az ugrás majd visszatérés. Jól használható a makrók kiváltására. Az inline függvényt nem az előfeldolgozó, hanem a fordítóprogram dolgozza fel, amely képes a típus ellenzőrzésre. Az inline minősítő nem kötelezi a fordítót az inline módú hivás-feldolgozásra Bevezetés a C++ programozási nyelvbe CPP0 / 30

Függvény overloading 1. Azonos hatáskörben azonos névvel különböző paraméterszignatúrával különböző függvényeket definiálhatunk. Paraméterszignatúra: a formális paraméterek száma és típus-sorrendje. A polimorfizmus egyik implementációs formája "környezet": paraméter szignatúra Bevezetés a C++ programozási nyelvbe CPP0 / 31

Függvény overloading 2. A függvény hívásakor a fordítóprogram az aktuális paraméterek szignatúráját sorban egyezteti az összes azonos nevű definíció formális paramétereinek szignatúráival. Ennek az egyeztetésnek az alábbi eredményei lehetnek: Pontosan egy illeszkedőt talál: ilyenkor az ennek megfelelő függvény hívását fordítja be. Egyetlen illeszkedőt sem talál: hibajelzést ad Több egyformán illeszkedőt talál: hibajelzést ad Korai kötés (early binding) Bevezetés a C++ programozási nyelvbe CPP0 / 32