Ó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 aJuhaszkutya
osztályok egymáshoz hasonlónak tekinthetőek. Mindkettő állatot ábrázol, mindkettőnek vanprivate
nev
adattagja é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 aJuhaszkutya
is a gyerekosztálya legyen!- Szervezzük ki a
nev
adattagokat 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
nev
adattagjá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ászkutya
oszályban default konstruktor legyen, ami a nevet "Bodri"-ra állítja! - A
Tehén
osztá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
hangotAd
konstans 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!
Tehen
esetén: "Hangot ad:muu"Juhaszkutya
eseté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
Cseszalj
osztá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 avizsgal
metó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
Cseszealj
osztá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
hangotAd
függvényt az ősosztályban! Futtassuk le avizsgal()
ésvizsgalRef()
metódusokat! - Próbáljuk ki, hogy kitörljük a
const
-ot aJuhaszkutya
hangotAd()
metódusáról! Futtassuk le így is avizsgalRef
metódust! Mit tapasztalunk?- Alkalmazzuk az
override
módosítót ahangotAd
felüldefiniálásokra!
- Alkalmazzuk az
- Írjunk egy saját kivétel osztályt! Neve legyen
OsAllatKivetel
és öröklődjön publikusan azstd::exception
osztályból! - Definiáljuk felül az
std::exception
ősosztályconst char* what() const noexcept
metódusát! Legyen a visszaadott szöveg: "Hiba: ős állat vizsgálata!"! - Dobjunk
OsAllatKivetel
típusú kivételt avizsgalRef
metódusban, ha a paraméterben kapott objektum az ősAllat
osztály sztringjét adja vissza ("Hangot ad:")! - Teszteljük a
vizsgalRef
függvényt ősAllat
objektum átadásával! Kapjuk el a kivételt amain
függvénybentry-catch
blokk segítségével!- Kapjuk el érték szerint, és írassuk ki a
cout
-ra awhat
metódus által visszaadott értéket! - Kapjuk el érték szerint, DE ős
(std::exception)
típusként! Írassuk kicout
-ra awhat
metó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
Ponty
osztályt, ami azAllat
ősosztályból öröklődik és ahangotAd
fü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 avizsgalRef
függvényt!- Hogyan lehetne a
try-catch
blokkban aruntime_exception
-t külön kezelni, mint a többiexception
-t?
- Hogyan lehetne a
- Hogyan lehetne elérni, hogy az általános
Allat
osztá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