bevezet é s a c++ programozási nyelvbe

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

Upload: diem

Post on 20-Jan-2016

61 views

Category:

Documents


1 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Bevezet é s  a C++ programozási nyelvbe

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)