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



Hasonló dokumentumok
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.

Származtatási mechanizmus a C++ nyelvben

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

Osztály és objektum fogalma

Objektumok inicializálása

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

Programozás C++ -ban 2007/4

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

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

PHP5 Új generáció (2. rész)

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

C++ programozási nyelv

Objektumorientált programozás C# nyelven

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

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

C++ programozási nyelv

Adatstruktúrák, algoritmusok, objektumok

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

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

Java és web programozás

Programozás 1. 2.gyakorlat

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

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

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

Objektumorientált programozás C# nyelven


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

117. AA Megoldó Alfréd AA 117.

P-GRADE fejlesztőkörnyezet és Jini alapú GRID integrálása PVM programok végrehajtásához. Rendszerterv. Sipos Gergely

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

C++ programozási nyelv Konstruktorok Gyakorlat

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

A SZOFTVERTECHNOLÓGIA ALAPJAI

Bánsághi Anna 1 of 67

Java és web programozás

TÁJÉKOZTATÓ OUTDOOR FULL POWER. OH Monitoring Kft. TNS Hoffmann Kft február

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

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

Szervlet-JSP együttműködés

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

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

0.2.1 Operátorok túlterhelése (műveletek definiálhatók felhaszn. típusokra) Kutya. Eb1. Eb2. Név (txt): Rex. Blöki. Német juhász 3

C++ programozási nyelv Konstruktorok-destruktorok

Programozási alapismeretek 4.

Bánsághi Anna

IBM Business Monitor 7. változat 5. alváltozat. IBM Business Monitor telepítési kézikönyv

Osztályok. 4. gyakorlat

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Elemi Alkalmazások Fejlesztése II.

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

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

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

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

Programozás II. labor

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

Pénzügyi algoritmusok

Kutatói pályára felkészítı akadémiai ismeretek modul

Előzmények

A hierarchikus adatbázis struktúra jellemzői

Java és web programozás

Objektumorientált programozás C# nyelven

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

Magas szintű programozási nyelvek 2 Előadás jegyzet

Történeti áttekintés

MEGBÍZÁSIszERzönÉS. (a továbbiakban együttes említésük során: Felek) kötöttek egymással az alulírott napon és feltétel ekkel.

Programozás C++ -ban

Öröklés és Polimorfizmus

Magyarországon a szerzői joggal a évi LXXVI. törvény foglalkozik.

500. AA Megoldó Alfréd AA 500.

Az AXA megoldásai a pénzügyi biztonságért

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

Rendelkezésre állás Magas szintű rendelkezésre állás bemutatása

Bevezetés a programozásba 2

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

Access 2010 Űrlapok és adatelérés

Szoftvertechnológia. Feladatgyűjtemény. Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék

A CONCORDE ALAPKEZELŐ ZRT. VÉGREHAJTÁSI POLITIKÁJA

eseményvezérelt megoldások Vizuális programozás 5. előadás

Elıírt lépésszámú ciklusok

Az informatika tantárgy fejlesztési feladatait a Nemzeti alaptanterv hat részterületen írja elő, melyek szervesen kapcsolódnak egymáshoz.

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

Objektumorientált szoftverfejlesztés alapjai

A Magyar Távhőszolgáltatók Szakmai Szövetségének javaslatai a távhőár-megállapítás témakörében

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


Smart Pointer koncepciója

A KÖLCSÖNSZERZŐDÉS ÉRVÉNYTELENSÉGÉNEK JOGKÖVETKEZMÉNYE 1

IBM Business Process Manager változat 8 alváltozat 5. Munkaerő-felvételi oktatóanyag

Access adatbázis elérése OLE DB-n keresztül

Vizuális programozás gyakorlat

26. Bosch Szarvasűzők Részletes versenyszabályok

JAVA PROGRAMOZÁS 3.ELŐADÁS

KOLLÉGIUMI FELVÉTELI PÁLYÁZATI KIÍRÁS ÉS ÜGYREND A BME VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KARÁN

1. feladat. Keresse meg, hogy kik teljesítették a legtöbb kreditet, kiknek a legrosszabb az átlaguk, kik a legfiatalabbak, stb.

Objektum orientált alapelvek

Alkalmazott modul: Programozás 11. előadás. Objektumorientált programozás: öröklődés

Felvonók energiahatékonysága

Átírás:

Az öröklés fogalma: A C++ öröklés (Előfeltétel: 12. tétel ismerete) olyan alapvető programozási technika, amely lehetővé teszi, hogy a már meglévő osztályainkból újakat tudunk származtatni, valamint az egymással kapcsolatban álló osztályokat hierarchiába tudjuk rendezni. Egy meglévő osztályból újat származtathatunk azáltal, hogy a meglévő osztály nevét feltüntetjük az új osztály deklarációjában. A már meglévő osztályt ősosztálynak, az új osztályt származtatott osztálynak nevezzük. A származtatott osztály örökli az ősosztály minden tagját, a származtatott osztályt új tagokkal láthatjuk el (változók, függvények). A származtatott osztály konstruktora explicit módon inicializálhatja az ősosztályát azáltal, hogy paramétereket ad át az ősosztály konstruktorának. Ha a származtatott osztály konstruktora expliciten nem inicializálja az ősosztály konstruktorát, akkor a fordító automatikusan az ősosztály konstruktorát hívja meg. //Õsosztály ; ~ ; cout << "Geza " << Geza.GetSorokSzama() << " sort iszik"; 1

Látható, hogy a két osztály nagyon hasonló, a programozó is az emberek halmazába tartozik. Tehát a programozó rendelkezik az emberekre jellemző tulajdonságokkal, ezen felül iszik sört. A : public CEmberek kifejezés hatására a CProgramozo a CEmberek osztályból származó osztály lesz. Ezért örökli a CEmberek osztály adattagjait és tagfüggvényeit. Ha a CProgramozo osztályt teljesen üresen deklaráltuk volna, akkor is rendelkezne az ősosztálya adattagjaival és metódusaival(tagfüggvényeivel). A public kulcsszavának hatására az ősosztály minden nyilvános tagja nyilvános marad a származtatott osztályban is. Nagyon ritka az az eset, amikor nem így származtatunk, csak speciális esetekben fordul elő. A CProgramozo osztály taggfüggvénye már a CProgramozo osztály egyedi jellemző függvénye. A konstruktorok és destruktorok meghívásának a sorrendje: Egy származtatott osztály példányosításakor a fordító a következő sorrendben hívja meg a konstruktorokat: 1. Ősosztály konstruktora. 2. Származtatott osztály tagobjektumainak (azon adattagjainak, amelyek objektumok(példányosított osztályok)) konstruktorai. Ezeket a konstruktorokat olyan sorrendben hívja meg, amilyen sorrendben azok az adott osztályban definiálva lettek. 3. Az osztály saját konstruktora. A destruktorok amennyiben definiálva vannak pontosan az ellenkező sorrendben futnak le. Így, amikor egy adott konstruktor hajtódik végre, tudni lehet, hogy az ősosztály és a tagobjektumok már inicializálásra kerültek, és így biztonságosan használhatóak. Hasonlóan, amikor egy adott destruktor fut le, tudjuk, hogy sem az ősosztály sem bármelyik tagobjektum nem lett még megsemmisítve, és így azok még mindig használhatóak. Ha az ősosztály egy adattagja védett, azaz deklarációjában szerepel a protected hozzáférés-módosító, akkor a tag elérhető az osztályból származtatott osztályban, de a program más függvényei által nem. Az int igondolat változót nem tudjuk elérni az származtatott osztályból, vannak esetek, amikor erre szükség van. Ezt a következőképpen tehetjük meg. ; Mivel az igondolat változó protected lett, így már a CProgramozo származtatott osztályból is elérhető lesz. Egy származtatott osztály szolgálhat egy másik osztály őseként. Ilyen módon az egymással kapcsolatban álló osztályok többszintű hierarchiája valósítható meg. Az öröklődés segítségével lehetőség nyílik egy osztály korábban megírt adatstruktúráinak és kódjának újrafelhasználására. Ezáltal könnyebben kezelhető a program és lehetőség van a program által kezelt objektumok kapcsolatrendszerének modellezésére. //Õsosztály, a CApolo közvetett(indirekt) őse ; 2

, CApolo közvetlen(direkt) őse ~ ; class CApolo : public CProgramozo CApolo() CApolo(int iparam) : CProgramozo(iparam) ~CApolo() ; cout << "Geza " << Geza.GetSorokSzama() << " sort iszik"; Az int igondolat bármelyik CEmberek-ből származtatott osztályból elérhető, de nem érhető el közvetlenül az osztályhierarchián kívüli kódrészben. A származtatott osztályok hierarchiájában minden osztály adott tagfüggvényének saját változatával rendelkezhet. Ha ez a függvény virtuális is egyben, akkor ennek meghívásakor mindig az aktuális objektum típusának megfelelő változat fog lefutni, még akkor, ha a hívás egy ősosztályra mutató mutatón keresztül történik. A virtuális függvények a polimorfizmus is támogatják, azaz egyetlen utasítás segítségével több, különféle művelet futhat le, és hogy éppen melyik, az a szóban forgó objektum típusától függ. A virtuális függvények segítségével egyszerű, általános célú rutinok írhatóak, amelyek különböző, de egymással kapcsolatban álló objektumok széles választékát tudják kezelni. 3

A virtuális függvények segítségével továbbá lehetőség van az ősosztály viselkedésének módosítására anélkül, hogy a forráskódon módosítanánk. Amikor a származtatunk, akkor a kód megkettőzése és a lehetséges egyéb redundanciák elkerülése cél. //Õsosztály ; ~ igondolat = 10; isorokszama += igondolat; ; class CApolo : public CProgramozo CApolo() CApolo(int iparam) : CProgramozo(iparam) ~CApolo() 4

; igondolat = 100; isorokszama += igondolat; CApolo Anett(25); Geza.Gondolkodik(); cout << "Geza " << Geza.GetSorokSzama() << " -ra gondolt.\n"; Anett.Gondolkodik(); cout << "Geza " << Anett.GetSorokSzama() << " -re gondolt.\n"; A program futásának az eredménye: Geza 25 sort iszik. Geza 26 sort iszik. Geza 36 -ra gondolt. Anett 125 -re gondolt. A virtuális függvények az objektum orientált programozás egy fontos vonását támogatják, a polimorfizmust(többalakúság). Akkor beszélünk többalakúságról, ha egyetlen utasítással többfajta különböző művelet hajtható végre, és az, hogy éppen melyik, attól függ, hogy éppen melyik objektumról van szó. Fenti példa jól mutatja ki hogyan gondolkodik és a gondolkodás milyen hatással van a megivott sörök számára. Az öröklés előnyei: Az öröklés segítségével újra felhasználhatóvá válnak a már megírt kódok és a már megtervezett adatstruktúrák. Ezáltal elkerülhető az adat és kód megkettőződése. A programokat könnyebben lehet karbantartani, mivel egy adott feladatot megvalósító kód és adatok általában a programban egyetlen, könnyen elérhető osztály definíciójában szerepelnek ahelyett, hogy szétszórva helyezkednének el a forráskódban. Számos, valós világból származó kapcsolatot lehet hatékonyan modellezni a C++ - ban definiált osztályhierarchiával. Például az emberek osztályából származtatott programozónak is szüksége lehet ápolóra, aki szintén programozó, hogy hatékony és gyors segítséget tudjon nyújtani a programozónak. 5