Kihagyás

Órai feladat

7. Gyakorlat

motto


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

kiindulo.cpp


  1. Egészítsük ki a Tehen osztá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!
  2. 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?
  3. 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?
  4. Legyen egy Tehen-re mutató pointerünk, és annak adjuk értékül valamelyik lokális Tehen objektum címét!
    • Írassuk ki az objektumok címeit és a pointer értékét!
  5. 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?
  6. Minden tehénnek lehet egy darab kolompja (a Kolomp osztály reprezentálja). Adjunk egy Kolomp pointer adattagot a Tehen osztá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 Kolomp pointert vár paraméterként!
  7. 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 Tehen szabadítja fel?
    • Mi történik, ha a main-ben felszabadítjuk? Ott hol tehetjük meg?
    • Mit tapasztalunk, ha a Tehen is törli a kolompot, és a main-ben is töröljük? (Segít-e, ha a Tehen osztályban nullptr-re állítjuk a pointert?)
  8. Módosítsuk a Tehen hangot ad metódusát! Ha van neki kolompja, akkor fűzzük hozzá a kolomp hangotAd metódusa által visszaadott értéket a "Muu" sztringhez!
  9. 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 -Werror kapcsolókat, a kolompGenerator2 és kolompGenerator3 le 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;
        }
    
  10. Vizsgáljuk meg egyenként a 7-es feladatban látott megoldásokat a valgrind nevű program segítségével!
    • A zöld gomb melletti 3 pötty menüpontra kattintva lehet indítani
  11. 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;
        }
    
  12. Szabadítsuk fel a Tehen destruktorában a dinamikusan allokált kolompot!
  13. Teszteljük az alábbi testTehen függvényt valgrindel! 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;
        }
    
  14. Találd meg a hibákat a kódban a valgrind segítségével.
    • Javítsd is a hibákat, amíg egyetlen hibát se jelez!
    Hibás kód

    valgrind_me.cpp


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

megoldas.cpp



Utolsó frissítés: 2025-11-27
Létrehozva: 2025-11-27