Gyakorló feladatok (3. hét)

Fontosabb kulcsszavak, fogalmak

  • new, delete, iostream, kivételkezelés felülnézetben
  • OO paradigmák, azok közül is legfőképp az egységbezárás
  • C megvalósítás, this
  • tagfüggvények, kívül és belül definiált tagfüggvények
  • konstans tagfüggvények
  • konstruktorok, destruktor
  • operátor overload

Javasolt gyakorló feladat

  1. Az előadáson bemutatott Komplex osztály mintájára készítsünk egy racionális számokat tároló osztályt!
  2. Kérdések a tervezéshez:
    • Hogyan írható le a feladat absztrakt adattal?
    • Hogyan reprezentálható maga az adat?
    • Hogyan viselkedik? Milyen műveletei vannak?
    • Hogyan szeretnénk használni?
      Pl így:
      int main() {
          Racionalis r, r1(3), r2(1,2), r3(1,3), rt[100];
          std::cout << r3.getSzamlalo() << std::endl;
          r1.kiir();
          r = r1 + r2;
          r = r1 * r2;
          r = !r2;
      }
      
    • Deklaráljuk osztályt!
      Az adatot és a rajta műveletet végző függvényeket összezárjuk. Minden ami belső ügy az a külvilág felé elérhetetlen. Ez jó, mert szabadon változtatható a belső.
    • Ezután valósítsuk meg a tagfüggvényeket!
    • Bővítse a főprogramot kis dinamikus játékkal, majd válaszoljon az alábbi kérdésekre:
         Racionalis *rp = new Racionalis(1,2);
         rp->kiir();
         delete rp;
         Racionalis *rpt = new Racionalis[20];
         rpt[0].kiir();
         delete[] rpt;
         rp = &r;
      
      • Mit ír ki?
      • Mikor hányszor fut le a konstruktor? Melyik?
      • Mikor hányszor fut le a destruktor?
      • A címképzéshez nem írtunk tagfüggvényt. Mégis lehet használni?
      • Mi történne, ha most kiadnánk egy delete rp-t?
    • Láttuk, hogy a printf, scanf nem biztonságos, gonosz függvények. Törtünk saját felelőssége jól kiírni magát. A függvény overload segítségével ezt a tudást a globális inserter operátorra bízhatjuk. Készítse el azt az insertert!
    • Készítsen beolvasó függvényt is!
Utolsó frissítés: 2018-02-23 21.41