Órai feladat
6. Gyakorlat¶
Az űrlények felfedezték, hogy a halfogyasztás jót tesz a bőrüknek. Emiatt a tehenek mellett most már kifejezetten pontyokat is szeretnének rabolni. Az elrabló modulok teljes felújítása vált szükségessé: segíts létrehozni az újfajta reprezentációt, mely a jövőben bármilyen állat elrablására képessé teszi az űrhajókat!

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
- Refaktoráljuk a kiindulási kódot! A
Tehenés aJuhaszkutyaosztályok egymáshoz hasonlónak tekinthetőek. Mindkettő állatot ábrázol, mindkettőnek vanprivatenevadattagja és mindkét osztályban szeretnénk elhelyezni egyhangotAd()függvényt, amelynek szignatúrája azonos, de más a belső működése a két osztályban.- Mi a hasonlóságok kezelésére a bevett objektum orientált módszer?
- Hozzuk létre az
Allatősosztáyt és végezzük el a szükséges módosításokat, hogy aTehenés aJuhaszkutyais a gyerekosztálya legyen!- Szervezzük ki a
nevadattagokat az ősosztályba! Hozzunk létre neki gettert, szettert és egy sztring paraméteres konstruktort is a beállításhoz!- Muszáj kitörölni a gyerek osztályok
nevadattagját? Miért? - Mi most töröljük a gyerekek nev adattagjait!
- Muszáj kitörölni a gyerek osztályok
- Próbáljuk lefordítani a kódot!
- Használjunk protected láthatóságot!
- Kezeljük a gyerekosztályok konstruktorait!
- A
Juhászkutyaoszályban default konstruktor legyen, ami a nevet "Bodri"-ra állítja! - A
Tehénosztályban maradjon az eddigi paraméteres konstruktor, de inicializáljuk a megfelelő módon az ősosztályban levő adattagot!
- A
- Szervezzük ki a
- Hozzunk létre egy
hangotAdkonstans metódust azAllatősosztályban. A függvény feladata, hogy visszaadja ezt a sztringet: "Hangot ad:"!- Definiáljuk felül a viselkedést a gyerekekben!
Tehenesetén: "Hangot ad:muu"Juhaszkutyaesetén: "Hangot ad:vau"
- Hogy lehet egyszerűsíteni a kódon, hogy ne kelljen mindig beírni a "Hangot ad:" prefixet?
- Definiáljuk felül a viselkedést a gyerekekben!
- Bővítsük a
Cseszaljosztályunkat! Készítsünk egyvizsgal(Allat a)publikus metódust, mely az elrablásra szánt állatot várja paraméterül!True-t ad vissza, ha az állat elrabolható, azaz tehén, és hamisat, ha nem (minden más). A vizsgálat ahangotAdáltal visszaadott sztring alapján történjen!- Ha a visszaadott sztring "muu"-ra végződik, az elrablás lehetséges!
- Ha a visszaadott sztring rövidebb, mint három karakter (rövidebb mint "muu"), legyen
std::runtime_error("tul rovid")kivétel dobva! - Hívjuk meg a
main-ben avizsgalmetódust tehénre és kutyára is! Mi a tapasztalat? - Írassuk ki a
hangotAd()által visszaadott értéket avizsgal()függvényen belül!
- Bővítsük a
Cseszealjosztályt egyvizsgalRef(const Allat& a)metódussal, ami konstans állat referenciát vár! Implementációja egyezzen avizsgal()metóduséval! Próbáljuk ki a használatát! - Tegyük virtuálissá a
hangotAdfüggvényt az ősosztályban! Futtassuk le avizsgal()ésvizsgalRef()metódusokat! - Próbáljuk ki, hogy kitörljük a
const-ot aJuhaszkutyahangotAd()metódusáról! Futtassuk le így is avizsgalRefmetódust! Mit tapasztalunk?- Alkalmazzuk az
overridemódosítót ahangotAdfelüldefiniálásokra!
- Alkalmazzuk az
- Írjunk egy saját kivétel osztályt! Neve legyen
OsAllatKivetelés öröklődjön publikusan azstd::exceptionosztályból! - Definiáljuk felül az
std::exceptionősosztályconst char* what() const noexceptmetódusát! Legyen a visszaadott szöveg: "Hiba: ős állat vizsgálata!"! - Dobjunk
OsAllatKiveteltípusú kivételt avizsgalRefmetódusban, ha a paraméterben kapott objektum az ősAllatosztály sztringjét adja vissza ("Hangot ad:")! - Teszteljük a
vizsgalReffüggvényt ősAllatobjektum átadásával! Kapjuk el a kivételt amainfüggvénybentry-catchblokk segítségével!- Kapjuk el érték szerint, és írassuk ki a
cout-ra awhatmetódus által visszaadott értéket! - Kapjuk el érték szerint, DE ős
(std::exception)típusként! Írassuk kicout-ra awhatmetódus által visszaadott értéket! - Módosítsuk a típust
const std::exception&-re (konstans referencia legyen) és így is teszteljük!
- Kapjuk el érték szerint, és írassuk ki a
- Írjunk egy
Pontyosztályt, ami azAllatősosztályból öröklődik és ahangotAdfüggvénye üres sztringet ad vissza, hiszen a halak nem beszélnek (legalábbis nem halljuk őket). Minden ponty neve "Nemo" legyen, úgysem tudnánk megkülönböztetni őket! Teszteljük ezzel is avizsgalReffüggvényt!- Hogyan lehetne a
try-catchblokkban aruntime_exception-t külön kezelni, mint a többiexception-t?
- Hogyan lehetne a
- Hogyan lehetne elérni, hogy az általános
Allatosztályból ne tudjunk példányt létrehozni? Implementáljuk is le!
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-10-26
Létrehozva: 2024-07-23
Létrehozva: 2024-07-23