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

Hasonló dokumentumok
Programozás C++ -ban 2007/4

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

Óbudai Egyetem. C programozási nyelv

C programozási nyelv

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

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

Osztályok. 4. gyakorlat

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

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv

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

Programozás C++ -ban 2007/7

Programozás I gyakorlat

Programozás módszertan

Objektumok inicializálása

Java és web programozás

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

Osztály és objektum fogalma

3. Osztályok II. Programozás II

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

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

Programozás C++ -ban

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Alprogramok, paraméterátadás

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

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

Bevezetés a programozásba Előadás: A const

Pénzügyi algoritmusok

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Származtatási mechanizmus a C++ nyelvben

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Programozási nyelvek Java

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Objektumelvű programozás

Interfészek. PPT 2007/2008 tavasz.

Bevezetés a C++ programozási nyelvbe

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

OOP #14 (referencia-elv)

Java és web programozás

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozás módszertan p.1/46

Programozás II gyakorlat. 8. Operátor túlterhelés

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Programozási nyelvek Java

Már megismert fogalmak áttekintése

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

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozás II gyakorlat. 4. Öröklődés

500. AA Megoldó Alfréd AA 500.

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)

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

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

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Elemi Alkalmazások Fejlesztése II.

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

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

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

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Java II. I A Java programozási nyelv alapelemei

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek

Objektum-orientált programozás

Információs Technológia

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

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Programozás C++ -ban

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

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

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

ISA szimulátor objektum-orientált modell (C++)

Generikus Típusok, Kollekciók

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

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto

Programozási alapismeretek 4.

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

Programozás C és C++ -ban

Programozás C++ -ban

Programozási nyelvek Java

Szoftvergyártás: gyártásvezérlés kód-figyeléssel

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

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

Pénzügyi algoritmusok

Globális operátor overloading

A programozás alapjai 1 Rekurzió

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

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

Java II. I A Java programozási nyelv alapelemei

C++ programozási nyelv

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

Osztálytervezés és implementációs ajánlások

Memóriakezelés, dinamikus memóriakezelés

Átírás:

Programozás módszertan II. p. Programozás módszertan II. Bevezetés, a C++ osztályok Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK

A munkamenet Programozás módszertan II. p.

Programozás módszertan II. p. A C és C++ nyelvek A C++ nyelv egyik legfontosabb tervezési szempontja a C programozási nyelvvel való kompatibilitás volt. Ezt a célt kitűnően sikerült megvalósítani és a mai napig megtartani. A kompatibilitás olyan jó, hogy a gyakorlatban minden C program egyben C++ programnak is tekinthető.

Programozás módszertan II. p. A fordítás UNIX rendszereken a C++ programokat tartalmazó állomány nevének végződése a hagyomány szerint.cpp, a C++ fordító pedig a c++ névvel indítható: # c++ stack.cpp # A UNIX C++ fordítóprogramok a gyakorlatban a UNIX C programokhoz hasonló módon használhatók. Általában ugyanaz a program végzi a C és C++ nyelvű programok fordítását. A GNU C fordító indítható g++ névvel is.

Összetett adatszerkezetek Programozás módszertan II. p.

Programozás módszertan II. p. Összetett adatszerkezetek Az összetett adatszerkezeteket (struktúrák, union-ok, tömbök stb.) a C++ nyelvben ugyanúgy készíthetünk, mint ahogyan azt a C programozási nyelvben már megszoktuk. A C és a C++ nyelvben is használható az eddig általunk nem tárgyalt bitmező (bit field) és pakolt struktúra adatszerkezet.

Programozás módszertan II. p. Bitmező Bitmezőket és pakolt struktúrákat használunk: Extrém helytakarékosság esetén (ritka). Szabvány által szabályozott adatszerkezetek (hálózat, állomány stb.) használatakor. Hardver közeli programozáskor a regiszeterek értékének kezelésekor. A bitmezők használata a programot lassítja!

Programozás módszertan II. p. Bitmező Bitmezőket a komponensnevek után megadott bitmérettel hozhatunk létre: struct command { int opcode:2; char retcode:6; };

Programozás módszertan II. p. Pakolt struktúrák A GNU C fordító lehetővé teszi pakolt struktúrák létrehozását: struct test{ unsigned char field1; unsigned short field2; unsigned long field3; } attribute (( packed )); typedef struct test test_t;

Egyszerű osztályok Programozás módszertan II. p. 1

Programozás módszertan II. p. 1 Osztályok A C++ nyelv legfontosabb újítása a C nyelvhez képest az osztályok, objektumok bevezetése, ezért a legfontosabb, hogy ezek használatát megtanuljuk. Az osztályok, objektumok használatán túl a legfontosabb, hogy az objektumorientált szemléletmódot is elsajátítsuk! Vizsgáljuk most át a stack.cpp állományt!

Programozás módszertan II. p. 1 Az osztály létrehozása class stack { public: stack(void); ~stack(void); void push(int value); int pop(void); private: int sp; int size; int *data; };

Programozás módszertan II. p. 1 Az osztály létrehozása Az osztály létrehozásának egyszerűsített vázlata: class név { public: definíció1; definíció2;... private: definíció3; definíció4; };

Programozás módszertan II. p. 1 Az osztály Primitív definíció: Az osztály olyan direktszorzat típuskonstrukció, amelynek komponensei közt alprogramok is lehetnek. A C++ osztályai tehát olyan struktúrák, amelyekben függvények is lehetnek. A C++ fel van készítve a komponensek hatókörének szabályozására is, így az adatrejtés fejlettebb eszközeivel rendelkezik.

Programozás módszertan II. p. 1 Objektumok Az osztály létrehozása mint ahogyan a struktúra létrehozása nem foglal memóriaterületet, nem hoz létre új változót. Az osztály létrehozása csak az új összetett típus felépítését írja le. Az objektumok létrehozásakor használjuk az előzőleg létrehozott osztályt, ahogyan a változó létrehozásakor használjuk az előzőleg létrehozott típust.

Programozás módszertan II. p. 1 Az objektum létrehozása int main(){ stack a; } a.push(10); a.push(20); printf("pop()=%d\n", a.pop()); printf("pop()=%d\n", a.pop());

Programozás módszertan II. p. 1 Az objektum Az objektum létrehozásának és használatának egyszerűsített vázlata: osztálynév objektumnév;...objektumnév.komponensnév...

Programozás módszertan II. p. 1 Az objektum Primitív definíció: Az objektum olyan változó, amely típusa valamely előzőleg létrehozott osztály. A C++ objektumai olyan struktúrák, amelyek komponensei közt függvények és objektumok is lehetnek. A C++ objektumainak létrehozása és használata ugyanúgy történik, ahogyan a C nyelvben a struktúrák létrehozása és használata.

Programozás módszertan II. p. 1 A hatókör szabályozása Az osztályon belül definiált komponensek láthatósága szabályozható a következő kulcsszavak segítségével: public: Az ilyen komponensek mindenütt elérhetők, ahol az osztály felhasználásával létrehozott objektum elérhető. private: Az ilyen komponensek csak az osztály függvényein belül érhetők el. protected: Az ilyen komponensek az osztály és bizonyos más osztályok függvényein belülről érhetők el.

Programozás módszertan II. p. 2 Komponensfüggvények Az osztály komponenseiként létrehozott függvények definíciója az osztály definícióján belül található, törzse pedig az osztály definícióján belül vagy az osztály definícióján kívül. A C++ nyelv esetében az osztálydefiníción belül elhelyezett függvények automatikusan inline típusmódosítót kapnak. A függvény törzsét csak egyszerűbb függvények esetében szokás az osztály definíciójának belsejében elhelyezni.

Programozás módszertan II. p. 2 Komponensfüggvények class stack { public: stack(void); ~stack(void); void push(int value); int pop(void){ return data[--sp]; }; private: int sp; int size; int *data; };

Programozás módszertan II. p. 2 Komponensfüggvények inline int stack::pop(void){ return data[--sp]; }

Programozás módszertan II. p. 2 Komponensfüggvények C++ nyelven írt programok esetében a függvények létrehozásakor a legtöbb esetben megadjuk a függvényt magába foglaló osztály nevét is. Erre a :: operátor használható: típus osztálynév::függvénynév(paraméterlista){... utasítás1; utasítás2;... }

Különleges komponensfüggvények Programozás módszertan II. p. 2

Programozás módszertan II. p. 2 Különleges függvények A C++ nyelv három különleges komponensfüggvényt ismer. Ezeket a függvényeket a lefordított program olyankor is hívja, mikor nem kapott rá kifejezetten utasítást. Ha ezeket a függvényeket nem hozzuk létre, a fordító létrehozza helyettünk! Az automatikusan létrehozott komponensfüggvények az egyszerűbb esetekben megfelelnek az igényeknek.

Programozás módszertan II. p. 2 Konstruktorok A konstruktor komponensfüggvényt a program akkor hívja meg, amikor az objektumot létrehozzuk. A konstruktor az alapbeállítások elvégzésére, az erőforrások lefoglalására használatos. A konstruktor neve megegyezik az osztály nevével. A konstruktornak nincs visszatérési értéke, paraméterlistája tetszőleges. A konstruktor túlterhelhető!

Programozás módszertan II. p. 2 Konstruktor (példa) A konstruktorok visszatérési értékét nem jelöljük! class stack { public: stack(void); ~stack(void); void push(int value); int pop(void); private: int sp; int size; int *data; };

Programozás módszertan II. p. 2 Kontruktor (példa) Ha a konstruktor paramétereket fogad, az objektum létrehozásakor az aktuális paramétereket meg kell adnunk. Ezt mutatja be a következő példa: pont a(3.2, 1.8); valtozo alpha("x", 3); ahol a pont és a valtozo osztályok, amelyek konstruktorai a megfelelő típusú paramétereket fogadják.

Programozás módszertan II. p. 2 Másoló konstruktor A konstruktor, amely csak az osztályhoz tartozó objektumot jelölő mutatót fogadja paraméterként, a másoló konstruktor. A fordító által készített program a másoló konstruktort hívja, amikor az objektumot le kell másolni (pl. paraméterátadáskor). A másoló konstruktornak egy új objektumot kell létrehoznia egy objektum lemásolásával. Ha objektumot adunk át paraméterként, ez létkérdés.

Programozás módszertan II. p. 3 Másoló konstruktor A másoló konstruktort megismerhetjük a nevéről (konstruktor) és a paraméterlistájáról. Figyelem: a C++ szigorúan veszi a const típusmódosítót! stack::stack(const stack &existing) {... }

Programozás módszertan II. p. 3 A destruktor A destruktor komponensfüggvényt a C++ fordító által készített kód meghívja, amikor az osztályhoz tartozó objektumot meg kell semmisíteni. A destruktor neve ~osztálynév formájú. A destruktornak nincsen visszatérési értéke, paraméterlistája pedig üres (void).

Programozás módszertan II. p. 3 A destruktor (példa) A következő példa bemutatja hogyan készíthetünk destruktort: stack::~stack(void){ if (sp!= 0) fprintf(stderr, "...\n"); free(data); }

Feladatok Programozás módszertan II. p. 3