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

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

Hasonló előadás


Az előadások a következő témára: "Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék."— Előadás másolata:

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

2 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

3 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)

4 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

5 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.

6 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

7 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;} };

8 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); } };

9 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ő!!! };

10 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";

11 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

12 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";

13 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

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

15 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: 636.667

16 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!

17 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ő

18 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.

19 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;} };

20 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); } };

21 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ú! }

22 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();} };

23 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; };

24 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.

25 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

26 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;} };

27 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;} };

28 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"; }


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

Hasonló előadás


Google Hirdetések