Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "A C++ programozási nyelvSoós Sándor 1/10 C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet."— Előadás másolata:

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

2 A C++ programozási nyelvSoós Sándor 2/10 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

3 A C++ programozási nyelvSoós Sándor 3/10 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.

4 A C++ programozási nyelvSoós Sándor 4/10 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!

5 A C++ programozási nyelvSoós Sándor 5/10 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!

6 A C++ programozási nyelvSoós Sándor 6/10 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

7 A C++ programozási nyelvSoós Sándor 7/10 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

8 A C++ programozási nyelvSoós Sándor 8/10 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.

9 A C++ programozási nyelvSoós Sándor 9/10 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.

10 A C++ programozási nyelvSoós Sándor 10/10 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


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

Hasonló előadás


Google Hirdetések