C++ programozási nyelv Gyakorlat hét

Slides:



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

Programozás III OOP ALAPOK.
Számítógépes ismeretek 5. óra
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 Tömbök, kollekciók és egyéb alaposztályok.
© 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.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Dinamikus tömbök.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Vizuális modellezés Uml és osztálydiagram UML eszközök
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. 8. Gyakorlat Operator overloading II.
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
Mutatók, tömbök, függvények
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.
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.
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.
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.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
C# tagfüggvények.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
© 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.
Vizuális és web programozás II.
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
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Objektumok. Az objektum információt tárol, és kérésre feladatokat hajt végre. Az objektum adatok (attribútumok) és metódusok (operációk,műveletek) összessége,
Objektumorientált tervezés és programozás II. 3. előadás
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
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 Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
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
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Objektum orientált programozás
1 Objektum orientált programozás Struktúrák és objektumok gyakorlat Nagy Szilvia.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Programozás III KIVÉTEL.
ProgramozásProgramozás célja hosszabb számítások elvégzése ill. kiíratása akkor érdemes programot írni, ha sok számolni való van illetve ha ugyanazt az.
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.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
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 III JPA.
A szoftver mint komplex rendszer: objektumorientált megközelítés.
A C++ programozási nyelv
String osztály létrehozása
Konverziós operátorok
Előadás másolata:

C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december

Tartalomjegyzék Objektumok másolása Másoló konstruktor és értékadás operátor letiltása Hogyan írjuk meg egy értékadó operátort ill. másoló konstruktort? Statikus és dinamikus tartalmazás osztályok között Segítő objektum Opcionális adatok A polimorfizmus használata

Objektumok másolása Milyen módokon másolhatunk objektumokat? másoló konstruktorral értékadás operátorral saját függvénnyel, vagy metódussal Ha mi nem tesszük meg, akkor a fordító hoz létre helyettünk másoló konstruktort és/vagy értékadás operátort, ami adattagonként bitenkénti másolást végez. Mikor veszélyes ez? tulajdonolt dinamikus memória esetén fájlok, adatbázisok használata esetén általánosságban, különböző erőforrások használatakor Hasznos tanács: Ha ilyen osztályt definiálunk, akkor rögtön tiltsuk le a másoló konstruktort és az értékadás operátort. Ha majd szükség lesz rájuk, akkor megírjuk őket.

Másoló konstruktor és értékadás operátor letiltása class Valami { public: ... private: Valami( Valami & masik ); Valami& operator=( Valami & masik ); }; Mi történik, ha ezek után megpróbálunk lemásolni egy valami típusú objektumot? Próbáljuk ki!

Hogyan írjuk meg egy értékadó operátort ill. másoló konstruktort? A másoló konstruktor és az értékadó operátor ugyanazt a feladatot látja el (objektum adattagjainak átmásolása), azonos esetekben működnek jól, vagy okoznak problémát. Ezért, ha az egyiket letiltjuk, vagy definiáljuk, akkor a másikat is célszerű. Mivel lényegében ugyanazt csinálják, ezért érdemes egy külön private metódusban megírni a lényeget, és annak segítségével definiálni a másoló konstruktort és az értékadó operátort. Nézzük meg a Sztringem.cpp fájlt!

Statikus és dinamikus tartalmazás osztályok között Nézzük meg a következő osztályt: class A { B b; // statikus tartalmazás C *c; // dinamikus tartalmazás } Mikor használjuk az egyik és mikor a másik megoldást? Mindkettőnek vannak előnyei és hátrányai egyaránt. Melyik mennyivel növeli az A osztály méretét? Mikor futnak le automatikusan a konstruktorok és a destruktorok? ez előny vagy hátrány? Vizsgáljuk meg a következő speciális eseteket: segítő objektum opcionális adatok

Segítő objektum Adott egy osztály, ami valamilyen szolgáltatást nyújt másoknak. Ekkor az igénybevevő objektumok ahelyett, hogy globális változón keresztül érnék el a szolgáltatót, megkaphatják a szolgáltató objektum címét, amit eltárolnak egy tagváltozó pointerben. Ha nem pointerben tárolná a szolgáltatót, hanem statikus tartalmazással építené be magába, akkor minden ilyen objektum létrehozna egy saját példányt a szolgáltatóból. Ez idő és memória veszteséggel járna, és lehetnek olyan esetek, amikor fogalmilag sem lehetséges több példány létrehozása. Példa az előadáson: Hanglejátszó objektum

Opcionális adatok Tegyük fel, hogy adatokat akarunk nyilvántartani és kezelni. Az adatok között vannak olyanok, amelyek az esetek egy jelentős részében üresen marad. Például embereket tartunk nyilván az önkormányzatnál akinek van autója, annak az autó adatait is kezelni akarjuk van akinek nincs autója, és van akinek több is van Ha minden emberhez eltárolnánk egy autó adatait, akkor feleslegesen pazarolnánk, főleg, ha 2-3 autót tárolnánk felkészülve arra, hogy néha lehet egy embernek több autója. Ilyenkor csak egy pointert tartunk fenn, amivel rámutatunk egy autó rekordra, vagy autó listára, vagy NULL, ha nincs autója. Tehát az opcionális adatokat legtöbbször dinamikus tartalmazással építjük be.

A polimorfizmus használata Például: Egész számokat akarunk tárolni valamilyen listában. A listát többféleképpen implementálhatjuk, pl. tömbbel, egyszeresen, kétszeresen láncolt listában, stb. Most meg is írunk több variációt, hogy minden helyzetben kiválaszthassuk a legjobb variánst. A lista műveletei között szeretnénk definiálni két lista összefűzését is. Egy programban előfordulhat, hogy több listát használunk, akár különböző implementációjúakat is. Ezeket is szeretnénk tudni összefűzni. Ehhez minden párosításra meg kell írnunk az összefűző metódusokat. Ha definiálunk egy újabb lista variációt, akkor minden típushoz meg kell írni az új összefűző metódust.

Példa polimorfizmus használatára, folyt. Ha azonban definiálunk egy absztrakt lista típust, akkor elég az ezzel való összefűzést megvalósítani. A polimorfizmus révén ez minden leszármazott típussal működni fog. Nézzük meg mindezt konkrétan: poli1a.cpp poli1b.cpp poli1c.cpp poli1d.cpp poli1e.cpp