Bevezetés a C++ programozási nyelvbe

Slides:



Advertisements
Hasonló előadás
Programozás III STRING-XML.
Advertisements

C++ programozási nyelv Gyakorlat hét
EE/R adatmodell (Extended E/R) 1 Az objektum orientált szemlélet elterjedésével egyre nőtt az igény az olyan SDM (Semantic Data Model) modellek iránt,
Algoritmus és programozás
Funkcionális programozás F#-ban
2009 Bevezetés a programozásba Krankovits Melinda.
JavaScript.
Programozási nyelvek.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
1 Programozás alapjai GEIAL312B (ANSI C) BSc (Bachelor of Science) / Alap képzés 2005/2006. őszi félév Miskolci Egyetem Általános Informatikai Tanszék.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Mutatók, tömbök, függvények
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 2. rész – Vezérlő szerkezetek
Adatbázis-kezelés ACCESS program:
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1.5 Programozó matematikus szak 2003/2004-es tanév II. félév.
LDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan.
Utasítások, elágazás- és ciklusszervezés C nyelvi utasítások
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Programozás I Függvények általános jellemzői
Vizuális és web programozás II.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
WEB MES (webes gyártásirányító rendszer)
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Ficsor Lajos CPP6 / 1 Virtuális bázisosztály Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Kivételkezelés a C++ nyelvben Bevezetés
Programozási nyelvek Páll Boglárka.
Készítette: Csíki Gyula
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Java programozási nyelv Metódusok
XML adatkezelés 1. témakör Az XML szabvány.
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Objektum orientált programozás
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
előadások, konzultációk
C Programozási alapok.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Típuskonverzió a C++ nyelvben
Bevezetés az Office programozásába
Gyurkó György. Az OO programozás és tervezés története 1960-as évek: SIMULA (véletlen folyamatokat szimuláló programok írása) az OO nyelvek őse 1970-es.
1 Objektum orientált programozás Az objektumok és az osztályok – példányosodás Nagy Szilvia.
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Script nyelvek előadás
Programozási nyelvek típusossága.
A C++ programozási nyelv
Compiler illetve interpreter nyelvek
Készítette: Révész Lajos Bálint
A CLIPS keretrendszer
Programozási nyelvek alapfogalmai
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Informatikai gyakorlatok 11. évfolyam
Informatikai gyakorlatok 11. évfolyam
Informatikai gyakorlatok 11. évfolyam
Az objektum-orientáltság
Előadás másolata:

Bevezetés a C++ programozási nyelvbe Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék Ficsor Lajos

Bevezetés a C++ programozási nyelvbe 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ó. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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 Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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 Ficsor Lajos Bevezetés a C++ programozási nyelvbe

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 Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe Megjegyzés (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ó. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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 Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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 és index egyaránt lokális a ciklusmagra nézve index betu Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe A definíció (folyt.) 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 Az index az őt tartalmazó kifejezés kiértékelésekor létrejön, és a ciklusból való kilépéskor 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! Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

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á. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Felsorolás, struktú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 Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Felsorolás, struktú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; Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Dinamikus memó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 Ficsor Lajos Bevezetés a C++ programozási nyelvbe

new típusnév[elemek száma] Bevezetés a C++ programozási nyelvbe 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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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]; Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

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ú. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Az ANSI-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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe A bool alaptí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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe A wchar_t alaptí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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Hivatkozás (cím) szerinti paramé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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Hivatkozás szerinti paramé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); Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Alapértelmezé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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Alapértelmezé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! Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Alapértelmezé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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Alapértelmezé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! } Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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. Ficsor Lajos Bevezetés a C++ programozási nyelvbe

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 Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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 Ficsor Lajos Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe 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) Ficsor Lajos Bevezetés a C++ programozási nyelvbe