A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
C++ programozási nyelv Gyakorlat hét
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Gyakori hibák C# programozásban
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
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.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Függvények, mutatók Csernoch Mária.
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.
A C++ programozási nyelvSoós Sándor 1/17 C++ programozási nyelv Gyakorlat - 7. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 2. rész – Vezérlő szerkezetek
A C++ programozási nyelvSoós Sándor 1/14 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A Java programozási nyelvSoós Sándor 1/16 Java programozási nyelv 6. rész – Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A Java programozási nyelvSoós Sándor 1/4 Java programozási nyelv 12. rész – Képek kezelése Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 5. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
C# tagfüggvények.
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
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.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Objektumorientált programozás
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Metódusok
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 4. Gyakorlat Függvény paraméterek, dinamikus.
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.
Programozás III OOP ÖRÖKLŐDÉS.
Programozás III KOLLEKCIÓK.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Struktúrák a C nyelvben 1 Akkor használjuk, ha az egy egyedre jellemző különböző típusú adatokat együtt akarjuk tárolni. Lényegében típusdeklaráció. A.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
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 Felkészítés szakmai vizsgára, informatika területre modulhoz II/14. évfolyam Az interaktív vizsga jellegzetes feladattípusainak.
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 Osztályok, objektumok definiálása és alkalmazása. Saját.
Programozás II. labor 2. rész (Adatszerkezetek)
A szoftver mint komplex rendszer: objektumorientált megközelítés.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Öröklődés Objektumok közötti speciális kapcsolat.
Konverziós operátorok
Függvénysablonok használata
Előadás másolata:

A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor november

A C++ programozási nyelvSoós Sándor 2/12 Tartalomjegyzék ● Miért örököltetünk osztályokat? ● 1. példa ● A virtual kulcsszó ● 2. példa ● Polimorfizmus, többalakúság ● Early binding, late binding ● Binding példa ● Miért jó a polimorfizmus? ● Pure virtual, tisztán virtuális metódusok ● Mire jók az absztrakt osztályok?

A C++ programozási nyelvSoós Sándor 3/12 Miért örököltetünk osztályokat? ● 1. eset: – Gyerek = szülő + valami ● a gyerek mindent tud, amit a szülő + tud még mást is ● ezzel az esettel foglalkoztunk a múlt héten ● 2. eset – Gyerek = szülő, másképp ● a gyerek ugyanazokat a dolgokat tudja, mint a szülő, de másképp ● ezzel foglalkozunk ma! ● A gyakorlatban a két dolog együtt zajlik. ● Általában egy gyerek egyrészt kiterjeszti a szülőjét újabb funkciókkal, másrészt egyes örökölt tulajdonságokat (metódusokat) módosít (felüldefiniál).

A C++ programozási nyelvSoós Sándor 4/12 1. példa class Szemely { public: virtual void Koszon(); }; void Szemely::Koszon() { printf("Jó napot!\n"); }; class Diak : public Szemely { public: virtual void Koszon(); }; void Diak::Koszon() { printf("Jó szerencsét!\n"); }; class Diak : public Szemely { public: virtual void Koszon(); }; void Diak::Koszon() { printf("Jó szerencsét!\n"); }; int main() { Szemely sz; Diak d; sz.Koszon();// Jó napot! d.Koszon();// Jó szerencsét! return 0; }; Ebben az esetben nem történt semmi váratlan. Ha most elhagynám a virtual kulcsszót, ugyanez lenne az eredmény. Ebben az esetben nem történt semmi váratlan. Ha most elhagynám a virtual kulcsszót, ugyanez lenne az eredmény.

A C++ programozási nyelvSoós Sándor 5/12 A virtual kulcsszó ● Két helyen írtuk le a virtual kulcsszót: – a szülőben – a gyerekben ● Mindkét helyen csak a deklarációban, a definícióban nem szabad kiírni! ● Ha most elhagynám, akkor ez a példa változatlanul működne, de nem célszerű elhagyni! ● Amikor egy függvényt felül fogunk definiálni az utódokban, akkor használjuk a virtual-t a szülő osztályban! – Erre később még visszatérünk! ● A gyerek osztályban mindegy, hogy kiírjuk-e, de érdemes kiírni dokumentációs szempontból, a program működését nem befolyásolja.

A C++ programozási nyelvSoós Sándor 6/12 2. példa ● A leszármazott egy felüldefiniált metódusban meghívhatja az ősének ugyanilyen nevű metódusát ● Mi történik, ha a Diak::Koszon-ben kihagyom a Szemely:: -t? ● Ezt is leírhatom a main-ben: d.Szemely::Koszon(); – szintaktikailag helyes, de kerülendő! Az objektum belső dolgait ne használjuk fel kívül. void Diak::Koszon() { Szemely::Koszon(); printf("Jó szerencsét!\n"); }; int main() { Diak d; d.Koszon();// Jó napot! // Jó szerencsét! return 0; };

A C++ programozási nyelvSoós Sándor 7/12 Polimorfizmus, többalakúság ● Nézzük meg a pelda3.cpp fájlt! ● Mi történik, ha nem virtualnak deklarálom a Koszon függvényt? ● Vizsgáljuk meg az f1() – f4() függvényeket!

A C++ programozási nyelvSoós Sándor 8/12 Egy kis háttér: Early binding, late binding ● Mit befolyásol a virtual kulcsszó? ● Amikor a fordító találkozik egy metódus meghívásával, akkor kétféleképpen járhat el: – ha a metódus nem virtuális, akkor a hívás helyére beírja az ott szereplő osztály hívott metódusának kezdőcímét, illetve az annak megfelelő jelzést. Ez fordítási időben megtörténik (early binding – korai kötés) – ha a metódus virtuális, akkor fordításkor csak egy hivatkozás kerül ide az osztályhoz tartozó Virtuális Metódus Tábla (VMT) megfelelő bejegyzésére – A VMT futás időben kerül kitöltésre, csak ekkor dől el, hogy az egyes virtuális metódusok ténylegesen milyen memóriacímre mutatnak (late binding – késői kötés) ● Nézzük meg az előző példa f1() függvényét!

A C++ programozási nyelvSoós Sándor 9/12 Binding példa void f1( Szemely &sz) { printf("f1: "); sz.Koszon(); }; ● Ha a Koszon() metódus nem virtuális, akkor az f1() lefordításakor sz.Koszon() helyére a Szemely osztály Koszon metódusának címe kerül. ● Ha viszont Koszon() virtuális, akkor ide csak az a jelzés kerül, hogy az f1()-nek átadott paraméter VMT táblájának 1. helyén szereplő címre kell ugrani. Majd futás időben derül, ki, hogy az f1() függvénynek milyen típusú objektumot adtunk át. ● A polimorfizmus miatt ez valóban csak futásidőben derül ki.

A C++ programozási nyelvSoós Sándor 10/12 Miért jó a polimorfizmus? ● Nézzük meg a Jegypenztar.cpp fájlt! – Egy programozó megírta a Jegypenztar() függvényt. – Később bármikor létrehozhatunk egy újabb leszármazottat a Szemelyből, arra is működni fog a Jegypenztar, még csak újra sem kell fordítani. ● Konténerben kezelt objektumok (geometria hf) – Ha egy konténerben (például egy tömbben) szeretnénk tárolni különböző típusú objektumokat (például a síkidomokat), akkor a közös ősből hozzuk létre a konténert. (Tömb esetén csak pointerekkel működik mindez!) – Ezek után egy ciklusban sorra lefuttathatjuk például a Kirajzoló, virtuális metódust. Minden síkidom esetén a megfelelő metódus fog lefutni.

A C++ programozási nyelvSoós Sándor 11/12 Pure virtual, tisztán virtuális metódusok class Szemely { public: virtual void Koszon() = 0; }; ● Ezzel a szintaktikával jelöljük a tisztán virtuális metódusokat. ● Absztrakt osztály: – van legalább egy tisztán virtuális tagfüggvénye – nem példányosítható ● Nézzük meg az absztrakt.cpp fájlt!

A C++ programozási nyelvSoós Sándor 12/12 Mire jók az absztrakt osztályok? ● Nyelvi eszközökkel segítik a tervezést. ● Az absztrakt osztályban deklaráljuk, hogy milyen metódusokat kell mindenképpen megvalósítani egy osztályban ahhoz, hogy példányosítani lehessen azt. ● Amíg nem írtuk meg az összes pure virtual metódust, addig nem lehet példányt létrehozni belőle. ● Miért fontos ez? – ez azt jelenti, hogy ezekre a tulajdonságokra (metódusokra) biztosan számíthatunk minden leszármazott osztályban ● Tervezzük tovább a múlt órai geometriai oktatóprogramot az új fogalmak felhasználásával!