1 / 32

Bevezet é s a C++ programozási nyelvbe

Bevezet é s a C++ programozási nyelvbe. Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék. 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.

diem
Download Presentation

Bevezet é s a C++ programozási nyelvbe

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. 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

  4. 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

  5. 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

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

  7. 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ábanfoglaló blokk végéig terjed. • Kivétel • afor 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

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

  9. A definíció (folyt.) • Mivel a betudefiní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! Bevezetés a C++ programozási nyelvbe

  10. Hivatkozás típus • C: minden alaptípusból pointer típus származtatható • C++ : minden típusbólhivatkozás típusis 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

  11. 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ípuscímet tárol de értékként(indirekció nélkül) hivatkozhatunkrá. Bevezetés a C++ programozási nyelvbe

  12. 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 unionkulcsszavak 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

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

  14. 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

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

  16. 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 volta 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

  17. 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

  18. 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

  19. 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

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

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

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

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

  24. 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); } Bevezetés a C++ programozási nyelvbe

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

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

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

  28. 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! } Bevezetés a C++ programozási nyelvbe

  29. 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

  30. Az inline függvény(folyt.) • Mire lehet jó? • A C++-ban gyakori anagyon rövidfü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ípusellenző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

  31. Függvény overloading1. 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

  32. Függvény overloading2. • 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

More Related