Kihagyás

Órai feladat

7. Gyakorlat

Az űrlények nagyon hisznek abban, hogy innentől kezdve mindenféle állatot el kell raboljanak ahhoz, hogy kiderítsék, mit mire tudnak használni, így tovább kell fejleszteni a csészealjakat ezen tevékenység támogatására.

motto


Nulladik feladat!

A feladatok megoldása előtt töltsük le a kiindulási kódunkat, ezt kiegészítve fogunk dolgozni!

Kiindulási kód

kiindulo.cpp


  1. Az elrabolt állatokat egy közös tárolóban (vektorban) akarják rakni. Az eltárolást az elrabol(const Tehen&) és elrabol(const Ponty&) metódusokban kell majd megvalósítani! Módosítsuk a Cseszealj osztályt úgy, hogy ezt meg tudják valósítani!
    • Cseréljük le az allatok vektorban a tárolt típust az ős típusra. Próbáljuk lefordítani a kódot!
    • Legyen az Allat ősosztálynak is print metódusa! Legyen polimorfikus, de ne legyen pure virtual! Az állat nevét írja ki! Figyeljünk oda rá, hogy a tehén osztályban lévő print() metódus felüldefiniálja az ős metódust! Használjuk az override kulcsszót!
    • Ha sikeres a print metódus átalakítása, egy új jellegű fordítási hiba jelenik meg:
      • error: invalid new-expression of abstract class type Allat
      • Mit jelent ez? Miért kapjuk?
    • Próbáljuk ki, hogy a hangotAd nem pure virtual az ősben! Fejezzük be az elrabol(const Ponty& p) függvényt! A Cseszealj print metódusát használva teszteljük az elrablásokat! Mi lehet a tapasztalt viselkedés oka? Gondoljunk az érték szerinti paraméterátadásra!
    • vector<Allat&> megoldás lehetne? Próbáljuk meg lefordítani!
  2. Legyenek az std::reference_wrapper segítségével letárolva az állatok a Cseszealjban!
    • vector<std::reference_wrapper<Allat>> allatok;
    • Vajon miért okoznak fordítási hibát az elrabol(const Ponty& t) és elrabol(const Tehen& t) függvények, ha le akarjuk tárolni a vektorban az elemeket?
  3. Az űrlényeknek tetszenek a pontyok. Szeretnének minden pontyfélének létrehozni egy gyerekosztályt, hogy a lehető legprecízebben tudják őket ábrázolni az adatbázisukban. Nyilvánvaló, hogy a leszármazó halak egyike sem fog normális hangot kiadni. Hogyan érjük el, hogy a Ponty egyik gyerekosztálya se definiálhassa felül a hangotAd metódust?
    • Hozzunk létre egy Bohocmarna (bohócmárna) osztályt, ami a Pontyból öröklődik és próbáljuk ki!
  4. Az űrlények szeretnék továbbfejleszteni az elrabolt állatokat. A céljuk, hogy megtanítsák őket beszélni. Hozzunk létre egy BeszedKepes osztályt. Legyen két függvénye:
    • void tanul(string)
      • Feladata, hogy letárolja a paraméterben érkező szavakat, kifejezéseket. Ismétlődést nem szabad letárolni! Melyik adatszerkezet a legmegfelelőbb? Valósítsuk meg!
    • string beszel() const
      • Feladata, hogy szóközzel elválasztva, ABC sorrendben összekonkatenálja a tanult szavakat és visszaadja.
  5. Hozzunk létre egy OkosJuhaszkutya osztályt, amely a Juhaszkutya és a BeszedKepes osztályokból öröklődik publikusan. Módosítsunk a hangotAd metódusán! Ez legyen a visszaadott érték: "Hangot ad:[tanult szavak szóközzel elválasztva, ABC sorrendben]"!
  6. Módosítsuk az OkosJuhaszkutya osztályban a tanul metódust! Ha a szó, amit meg kellene tanulnia hosszabb, mint 20 karakter, akkor legyen kivételként dobva a szó! 5-nél több szót nem tud megtanulni még az okos juhászkutya sem. Ekkor is legyen std::exception dobva a tanul-ban!
    • Próbáljuk ki az OkosJuhaszkutya osztály funkcióit a main-ben!
    • Kapjuk el a kivételeket egyetlen catch ággal!

Elakadtál, nem tudtad követni az órát?! Vagy csak átismételnéd? Egy lehetséges megoldását a feladatoknak megmutatjuk!

Órai feladat megoldása

megoldas.cpp



Utolsó frissítés: 2024-11-20
Létrehozva: 2024-07-24