Ó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.
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
- Az elrabolt állatokat egy közös tárolóban (vektorban) akarják rakni. Az eltárolást az
elrabol(const Tehen&)
éselrabol(const Ponty&)
metódusokban kell majd megvalósítani! Módosítsuk aCseszealj
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 isprint
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 azoverride
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?
- error: invalid new-expression of abstract class type
- Próbáljuk ki, hogy a
hangotAd
nem pure virtual az ősben! Fejezzük be azelrabol(const Ponty& p)
függvényt! ACseszealj
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!
- Cseréljük le az
- Legyenek az
std::reference_wrapper
segítségével letárolva az állatok aCseszealj
ban!vector<std::reference_wrapper<Allat>> allatok;
- Vajon miért okoznak fordítási hibát az
elrabol(const Ponty& t)
éselrabol(const Tehen& t)
függvények, ha le akarjuk tárolni a vektorban az elemeket?
- 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 ahangotAd
metódust?- Hozzunk létre egy
Bohocmarna
(bohócmárna) osztályt, ami aPonty
ból öröklődik és próbáljuk ki!
- Hozzunk létre egy
- 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.
- Hozzunk létre egy
OkosJuhaszkutya
osztályt, amely aJuhaszkutya
és aBeszedKepes
osztályokból öröklődik publikusan. Módosítsunk ahangotAd
metódusán! Ez legyen a visszaadott érték: "Hangot ad:[tanult szavak szóközzel elválasztva, ABC sorrendben]"! - Módosítsuk az
OkosJuhaszkutya
osztályban atanul
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 legyenstd::exception
dobva atanul
-ban!- Próbáljuk ki az
OkosJuhaszkutya
osztály funkcióit amain
-ben! - Kapjuk el a kivételeket egyetlen
catch
ággal!
- Próbáljuk ki az
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
Utolsó frissítés:
2024-11-20
Létrehozva: 2024-07-24
Létrehozva: 2024-07-24