Ó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 aCseszealjosztályt úgy, hogy ezt meg tudják valósítani!- Cseréljük le az
allatokvektorban a tárolt típust az ős típusra. Próbáljuk lefordítani a kódot! - Legyen az
Allatősosztálynak isprintmetó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 azoverridekulcsszót! - Ha sikeres a
printmetó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
hangotAdnem pure virtual az ősben! Fejezzük be azelrabol(const Ponty& p)függvényt! ACseszealjprintmetó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_wrappersegítségével letárolva az állatok aCseszealjban!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
Pontyegyik gyerekosztálya se definiálhassa felül ahangotAdmetódust?- Hozzunk létre egy
Bohocmarna(bohócmárna) osztályt, ami aPontybó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
BeszedKepesosztá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
OkosJuhaszkutyaosztályt, amely aJuhaszkutyaés aBeszedKepesosztályokból öröklődik publikusan. Módosítsunk ahangotAdmetódusán! Ez legyen a visszaadott érték: "Hangot ad:[tanult szavak szóközzel elválasztva, ABC sorrendben]"! - Módosítsuk az
OkosJuhaszkutyaosztályban atanulmetó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::exceptiondobva atanul-ban!- Próbáljuk ki az
OkosJuhaszkutyaosztá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