Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.

Slides:



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

ADATBÁZISOK.
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
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
Programozás alapjai.
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. 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
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
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 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.
© 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.
Kivételkezelés a C++ nyelvben Bevezetés
Bevezetés a C++ programozási nyelvbe
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.
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.
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.
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.
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ú,
Objektumorientált programozás
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.
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.
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ó.
2012. március 21. Paulik Áron.  Ha a függvényünk feladata olyan, hogy nem lenne értelme a visszatérési értéknek, vagy csak nincs rá szükség, void típusúként.
Ficsor Lajos A C++ programozási nyelv I. CPP1/ 1 Osztály és objektum fogalma.
Típuskonverzió a C++ nyelvben
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
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 JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
LA C++ programozási nyelv Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 16./0. lA világ objektum alapú szemlélete lSzoftverfejlesztési.
A szoftver mint komplex rendszer: objektumorientált megközelítés.
A C++ programozási nyelv
Hernyák Zoltán Programozási Nyelvek II.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
String osztály létrehozása
Öröklődés Objektumok közötti speciális kapcsolat.
Konverziós operátorok
Feladat Készítsünk programot, amely ciklikusan egy egyenest forgat 8 fokonként, mialatt 3 db vektort mozgat és forgat 5, 6 ill 7 fokonként, és kijelzi.
Függvénysablonok használata
Előadás másolata:

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 2. (Öröklődés) CPP2 / 2 Az öröklődés fogalma 1. Egy osztály deklarálható valamely más osztály(ok) leszármazottjaként. Az deklaráció formája: class név: [kulcsszo] osztalynev1 [, [kulcsszo] osztalynev2... ] { // itt jön a tagok deklarációja } Öröklődés: inheritance

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 3 Az öröklődés fogalma 2. A kulcsszo (amely az öröklés módját írja elő) lehet public vagy private Ha a kulcsszo hiányzik, az alapértelmezés private (információ rejtés alapelve!) Az osztálynev1 nevű osztály a szülő, vagy ős osztály. (base class)

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 4 Az öröklődés fogalma 3. A név osztály rendelkezik –a szülő osztály tagjaival –a saját tagjaival Az ős osztály elemeinek az elérése a leszármazott osztályból nem feltétlenül garantált. Öröklődnek bizonyos tulajdonságok. Pl. –operátor overloading –friend függvények és osztályok

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 5 Az öröklődés fogalma 4. Az öröklődési hierarchia tetszőleges lehet. –Egyetlen korlátozás: egy osztály még közvetett módon sem lehet saját maga őse. Az ős osztály továbbra is használható önmagában is.

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 6 Egyszerű példa: CPPEX6.CPP Az egyszerű hierarchiára példa a CPPEX6.CPP Ez szemlélteti: akkor érdemes használni, ha a modellezendő valóságos objektumok viszonya is hierarchikus az öröklést tartalmazó definíciót azonos nevű függvények a különböző szinteken. Ez újradeklarálás, nem pedig függvény overloading. (SCOPE operátor használata!) a public öröklési módot

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 7 Egyszerű példa: jarmu osztály class jarmu {// public oroklesi mod int kerekek; double suly; public: void kezdoertek(int k, double s) {kerekek = k; suly = s;} int kerekszam (void) { return kerekek;} double kerekterheles(void) {return suly / kerekek; }; double sulya() {return suly;} };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 8 Egyszerű példa: gepkocsi osztály class gepkocsi : public jarmu { int szemelyek; public: void kezdoertek(int k, double s, int szem) {szemelyek = szem; jarmu::kezdoertek(k, s); } };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 9 Egyszerű példa: teherauto osztály class teherauto : public jarmu { int szemelyek; double raksuly; public: void teher_kezdoertek (int szem,double rs) {szemelyek = szem; raksuly = rs; } double kerekterheles() {return (sulya() + raksuly + szemelyek*60.) / kerekszam(); } // suly + … hibas lenne, mert suly // nem elérhető!!! };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 10 Egyszerű példa: bicikli objektum main () { jarmu bicikli; bicikli.kezdoertek(2,15.0); cout << "Bicikli kerekeinek szama " << bicikli.kerekszam() << "\n"; cout << "Bicikli kerekterhelese: " << bicikli.kerekterheles() << "\n";

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 11 A bicikli objektum felépítése Az objektum típusa jarmu class jarmu kerekek súly

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 12 Egyszerű példa: trabant objektum gepkocsi trabant; trabant.kezdoertek (4, 600.0, 4); cout << "Trabant kerekeinek szama: " << trabant.kerekszam() << "\n";

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 13 A trabant objektum felépítése Az objektum gepkocsi típusú class jarmu kerekek súly szemelyek Gepkocsi sajat adattagja class gepkocsi

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 14 Egyszerű példa: ifa objektum teherauto ifa; ifa.kezdoertek(6, ); ifa.teher_kezdoertek(2,2500.0); cout << "Max. kerekterheles: " << ifa.kerekterheles() << "\n"; }

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 15 Egyszerű példa: eredmény Eredmény: Bicikli kerekeinek szama: 2 Bicikli kerekterhelese: 7.5 Trabant kerekeinek szama: 4 Max. kerekterheles:

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 16 Láthatósági kulcsszavak Egy osztály mezőinek láthatósága lehet: public: a mező bárhol használható, ahol az osztály ismert protected: a mező az adott osztály és annak valamennyi leszármazott osztálya számára ismert private: a mező csak az adott osztály számára ismert Az öröklés módja ezek hatását módosíthatja a leszármazott osztályok számára!

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 17 Láthatóság és öröklődés 1. Öröklés módjaLáthatóság (ős)Láthatóság (leszármazott) public protected privatenem elérhető privatepublicprivate protectedprivate nem elérhető

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 18 Láthatóság és öröklődés 2. Megjegyzések: Az öröklés módja csak korlátozhatja a hatáskört. Egy leszármazott osztály elérési joga kisebb, mind a friend osztályé. Példák: CPPEX7.C és CPPEX8.C –A kulsofgv használhatja a c,e és Xfgv tagokat. –Az Xfgv használhatja a b,c,d,e és Bfgv tagokat.

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 19 Példa private öröklési módra (cppex6a) class jarmu { int kerekek; double suly; public: void kezdoertek(int k, double s) {kerekek = k; suly = s;} int hanykerek (void) { return kerekek;} double kerekterheles(void) {return suly / kerekek; }; double sulya(void) {return suly;} };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 20 Példa private öröklési módra (cppex6a) class gepkocsi : jarmu {//alapért: private int szemelyek; public: void kezdoertek(int k, double s, int szem) { szemelyek = szem; jarmu::kezdoertek(k, s); } };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 21 Példa private öröklési módra (cppex6a) main () { gepkocsi trabant; trabant.kezdoertek (4, 600.0, 4); // double jarmu::sulya() is inaccessible // within this context Cout << "Trabant sulya:" << trabant.sulya() << "\n"; // Az örökölt sulya fgv. private // láthatóságú! }

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 22 Megoldás wrapper függvénnyel (cppex6b) class jarmu { // ugyanaz, mint előbb }; class gepkocsi : jarmu { int szemelyek; public: void kezdoertek(int k, double s, int szem) {// Ugyanaz, mint előbb} // Ez a wrapper fuggveny double sulya(void) { return jarmu::sulya();} };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 23 Megoldás explicit átminősítéssel (cppex6c) class jarmu { // ugyanaz, mint előbb }; class gepkocsi : jarmu { int szemelyek; public: void kezdoertek(int k, double s, int szem) {// Ugyanaz, mint előbb} // A sulya fgv-t explicite public-a // tesszuk jarmu::sulya; };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 24 Konstruktorok és destruktorok 1. Egy leszármaztatott objektum létrehozásakor először a szülő osztály(ok) konstruktora(i) hajtódnak végre (a deklaráció sorrendjében), majd a leszármaztatott osztályé. A leszármazott osztály konstruktora kijelölheti az ősosztály megfelelő konstruktorát a definíciójában megadott taginicializációs listával. (Formáját lásd a példában) További szabályok is vannak.

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 25 Konstruktorok és destruktorok 2. A destruktorok végrehajtási sorrendje most is pontosan fordítottja a konstruktorénak. Egyszerű példa: CPPEX11.C

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 26 cppex11.C 1. class jarmu { protected: int kerekek; double suly; public: jarmu (int k, double s) {kerekek = k; suly = s;} int hanykerek(void {return kerekek;} };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 27 cppex11.C 2. class gepkocsi : public jarmu { protected: int szemelyek; public: gepkocsi(int k,double s,int szem) : jarmu (k, s) {szemelyek = szem;} };

Ficsor Lajos A C++ programozási nyelv 2. (Öröklődés) CPP2 / 28 cppex11.C 3. main () { jarmu bicikli (2,15); cout<< "Bicikli kerekeinek szama: " << bicikli.hanykerek() << "\n"; gepkocsi trabant (4, 120.0, 4); cout<< "Trabant kerekeinek szama: " << trabant.hanykerek() << "\n"; }