Órai feladat
7. Gyakorlat¶

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
- Egészítsük ki a
Tehenosztályt egy destruktorral. A destruktor írja ki a standard outputra, hogy:- "[nev] megsemmisul", ahol a [nev] helyére illesszük be a megsemmisülő tehén nevét!
- Példányosítsuk le a
mainben a tehenet! A tehén neve legyen "Main"!- Hozzunk létre a "Main" után egy "Main2" nevű tehenet is! Milyen sorrendben fognak létrejönni és megsemmisülni?
- Hozzunk létre egy globális tehén objektumot is! Neve legyen "Global"! Mikor jön létre és mikor szűnik meg ez az objektum?
- Legyen egy
Tehen-re mutató pointerünk, és annak adjuk értékül valamelyik lokálisTehenobjektum címét!- Írassuk ki az objektumok címeit és a pointer értékét!
- Hozzunk létre a
mainben egy dinamikusan módon lefoglalt tehenet! Neve legyen: "Dinamikus"!- Mit tapasztalunk, mi történik, ha expliciten nem hívjuk meg a destruktort?
- Minden tehénnek lehet egy darab kolompja (a
Kolomposztály reprezentálja). Adjunk egyKolomppointer adattagot aTehenosztályhoz!- Kezdetben egy tehén sem rendelkezik kolomppal. Legyen
nullptr-re inicializálva a kolomp pointer! - Hozzunk létre gettert az adattaghoz!
- Hozzunk létre egy settert az adattaghoz, amely egy
Kolomppointert vár paraméterként!
- Kezdetben egy tehén sem rendelkezik kolomppal. Legyen
- Fel kell-e szabadítani a destruktorban az így letárolt kolompot? Ha igen, akkor kinek és mikor?
- Mi van, ha egyik helyen sem szabadítjuk fel?
- Mi van, ha a csak a
Tehenszabadítja fel? - Mi történik, ha a
main-ben felszabadítjuk? Ott hol tehetjük meg? - Mit tapasztalunk, ha a
Tehenis törli a kolompot, és amain-ben is töröljük? (Segít-e, ha aTehenosztálybannullptr-re állítjuk a pointert?)
- Módosítsuk a
Tehenhangot ad metódusát! Ha van neki kolompja, akkor fűzzük hozzá a kolomphangotAdmetódusa által visszaadott értéket a "Muu" sztringhez! - Teszteljük az alábbi kolomp-beállító függvényt!
- Másoljuk be őket a kódunkba globális függvényekként!
- Melyik megoldás helyes? Miért?
- Ha használjátok a
-Wall -Werrorkapcsolókat, akolompGenerator2éskolompGenerator3le se fordul! Miért? Próbáld ki a kapcsolók nélkül fordítani!
Kolomp beállító függvények
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
void kolompGenerator1(Tehen& t){ unsigned kolompCounter; cin >> kolompCounter; t.setKolomp(new Kolomp(kolompCounter)); } Kolomp* kolompGenerator2(){ unsigned kolompCounter; cin >> kolompCounter; Kolomp uj(kolompCounter); return &uj; } Kolomp& kolompGenerator3(){ unsigned kolompCounter; cin >> kolompCounter; Kolomp uj(kolompCounter); return uj; }Kipróbálásuk a main-ben
1 2 3 4 5 6 7
int main() { Tehen tk("Riska"); kolompGenerator1(tk); //tk.setKolomp(kolompGenerator2()); //tk.setKolomp(&kolompGenerator3()); cout << tk.hangotAd() << endl; } - Vizsgáljuk meg egyenként a 7-es feladatban látott megoldásokat a
valgrindnevű program segítségével!- A zöld gomb melletti 3 pötty menüpontra kattintva lehet indítani
- Teszteljük a
kolompGenerator1-t az alábbi módon is:1 2 3 4 5 6 7
int main() { Tehen tk("Riska"); Tehen tk2("Nem Riska"); kolompGenerator1(tk); //kolomp beallitasa tk = tk2; //feluliras cout << tk.hangotAd() << endl; } - Szabadítsuk fel a
Tehendestruktorában a dinamikusan allokált kolompot! - Teszteljük az alábbi
testTehenfüggvénytvalgrindel! Mi a hiba oka? Hogyan javítsuk?1 2 3 4 5 6 7 8 9 10
void testTehen(Tehen t){ cout << t.hangotAd() << endl; } int main() { Tehen t("Riska"); kolompGenerator1(t); testTehen(t); return 0; } - Találd meg a hibákat a kódban a
valgrindsegítségével.- Javítsd is a hibákat, amíg egyetlen hibát se jelez!
Hibás kód
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:
2025-11-27
Létrehozva: 2025-11-27
Létrehozva: 2025-11-27