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
- Az előadáson bemutatott Komplex osztály mintájára készítsünk egy racionális számokat tároló osztályt!
- 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