Bevezet é s a C++ programozási nyelvbe
description
Transcript of Bevezet é s a C++ programozási nyelvbe
![Page 1: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/1.jpg)
FicsorLajos
CPP0 / 1
BevezetBevezetééss a C++ programozási nyelvbe a C++ programozási nyelvbe
Ficsor Lajos
Miskolci Egyetem
Általános Informatikai Tanszék
![Page 2: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/2.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 2
TörténeteTö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ó.
![Page 3: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/3.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 3
TörténeteTörténete (folyt.)(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
![Page 4: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/4.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 4
Használatának módjaiHaszná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
![Page 5: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/5.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 5
Nem objektum orientált kiterjesztésekNem 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ésdefinícióhivatkozás típusfelsorolás, struktúra és unió típusú objektumoktípuskonverziódinamikus memóriakezelésúj alaptípusokfüggvényekre vonatkozó kiterjesztések
![Page 6: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/6.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 6
Megjegyzés (comment)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ó.
![Page 7: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/7.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 7
A definA definícióí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ésbenaz if, while és switch utasítások feltételében
deklarált azonosítók ezen utasításokra nézve lokálisak
![Page 8: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/8.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 8
A definA definíció (folyt.)í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
betuindex
![Page 9: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/9.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 9
A definA definíció (folyt.)í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!
![Page 10: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/10.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 10
Hivatkozás típusHivatkozá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.
![Page 11: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/11.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 11
Hivatkozás típus (folyt.)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á.
![Page 12: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/12.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 12
Felsorolás, struktúraFelsorolás, struktúra,, unió típusú unió típusú objektumok deklarálásaobjektumok 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
![Page 13: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/13.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 13
FFelsorolás, struktúraelsorolás, struktúra,, unió típusú unió típusú objektumok deklarálásaobjektumok deklarálása (folyt.) (folyt.)
Példa:struct datum { int ev; char honap[15]; int nap;};// a "struct" alapszó elmaradhatdatum ma,holnap,szulinap;
![Page 14: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/14.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 14
Típuskonverzió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.
![Page 15: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/15.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 15
Dinamikus memóriakezelésDinamikus 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
![Page 16: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/16.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 16
A new operátorA new operátor
Formája:new típusnév
vagynew 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ábanHa 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.
![Page 17: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/17.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 17
A new operátorA new operátor (folyt.)(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];
![Page 18: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/18.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 18
A delete operátorA 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.
![Page 19: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/19.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 19
A delete operátorA delete operátor (folyt.) (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ú.
![Page 20: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/20.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 20
Az ANSI-C helyfoglaló függvényeiAz 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.
![Page 21: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/21.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 21
A bool alaptípusA 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.
![Page 22: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/22.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 22
A wchar_t alaptípusA 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.
![Page 23: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/23.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 23
Hivatkozás (cím) szerinti paraméterátadásHivatkozá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.
![Page 24: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/24.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 24
Hivatkozás szerinti paraméterátadásHivatkozás szerinti paraméterátadás (példa) (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);}
![Page 25: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/25.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 25
Alapértelmezés szerinti paraméter értékAlapértelmezés szerinti paraméter érték 1. 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.
![Page 26: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/26.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 26
Alapértelmezés szerinti paraméter értékAlapértelmezés szerinti paraméter érték 2. 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!
![Page 27: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/27.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 27
Alapértelmezés szerinti paraméter értékAlapértelmezés szerinti paraméter érték 3. 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.
![Page 28: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/28.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 28
Alapértelmezés szerinti paraméter értékAlapértelmezés szerinti paraméter érték 4. 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!}
![Page 29: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/29.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 29
Az inline függvényAz 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.
![Page 30: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/30.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 30
Az inline függvényAz inline függvény (folyt.)(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
![Page 31: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/31.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 31
Függvény overloadingFüggvény overloading 1.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
![Page 32: Bevezet é s a C++ programozási nyelvbe](https://reader034.fdocuments.net/reader034/viewer/2022051001/56814f35550346895dbccd35/html5/thumbnails/32.jpg)
FicsorLajos
Bevezetés a C++ programozási nyelvbe CPP0 / 32
Függvény overloadingFüggvény overloading 2.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 adTöbb egyformán illeszkedőt talál: hibajelzést ad
Korai kötés (early binding)