C++ programozási nyelv



Hasonló dokumentumok
C++ programozási nyelv

C++ programozási nyelv Konstruktorok-destruktorok

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

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

C++ programozási nyelv Konstruktorok Gyakorlat

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

Programozási alapismeretek 4.

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

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

Osztályok. 4. gyakorlat

Java programozási nyelv 5. rész Osztályok III.

Programozás C++ -ban 2007/7

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?

Smart Pointer koncepciója

Objektumok inicializálása

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Már megismert fogalmak áttekintése

Bevezetés a Python programozási nyelvbe

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

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Objektum orientált kiterjesztés A+ programozási nyelvhez

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

Pénzügyi algoritmusok

Programozás módszertan p.1/46

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

C++ programozási nyelv

JAVA PROGRAMOZÁS 2.ELŐADÁS

Osztály és objektum fogalma

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

Programozás C++ -ban

3. Osztályok II. Programozás II

Java és web programozás

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

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

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

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

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

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.

ELTE SAP Excellence Center Oktatóanyag 1

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Java és web programozás

Programozási nyelvek Java

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

Adatszerkezetek 2. Dr. Iványi Péter

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Java és web programozás

Interfészek. PPT 2007/2008 tavasz.

Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal.

OOP #14 (referencia-elv)

Programozás II. 6.Öröklés Dr. Iványi Péter

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

Objektumorientált szoftverfejlesztés alapjai

Programozás alapjai II. (4. ea) C++

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

OOP. Alapelvek Elek Tibor

Objektumorientált programozás C# nyelven

Alkatresz::Alkatresz(string n; int csz, int a) { nev = n; cikkszam = csz; ar = a; };

Számítógép és programozás 2

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

Java programozási nyelv 6. rész Java a gyakorlatban

Google C++ style guide

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Programozás módszertan

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Objektumelvű programozás

7. fejezet: Mutatók és tömbök

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

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

Származtatási mechanizmus a C++ nyelvben

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

Elemi Alkalmazások Fejlesztése II.

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

OOP: Java 8.Gy: Abstract osztályok, interfészek

Mutatók és mutató-aritmetika C-ben március 19.

Programozás II gyakorlat. 6. Polimorfizmus

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

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

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

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

1.sz melléklet Nyári gyakorlat teljesítésének igazolása Hiányzások

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

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

Bevezetés a programozásba előadás: Öröklődés

Java II. I A Java programozási nyelv alapelemei

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

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

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

OOP és UML Áttekintés

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Programozási nyelvek Java

Java II. I A Java programozási nyelv alapelemei

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

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

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

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

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

Átírás:

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 A C++ programozási nyelv Soós Sándor 1/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 A C++ programozási nyelv Soós Sándor 2/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. A C++ programozási nyelv Soós Sándor 3/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! A C++ programozási nyelv Soós Sándor 4/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! A C++ programozási nyelv Soós Sándor 5/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 A C++ programozási nyelv Soós Sándor 6/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 A C++ programozási nyelv Soós Sándor 7/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. A C++ programozási nyelv Soós Sándor 8/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. A C++ programozási nyelv Soós Sándor 9/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 A C++ programozási nyelv Soós Sándor 10/10