Programozás 2 - 2. feladat

Intervallum

Hozz létre egy IntervalSet nevű osztályt, ami Interval objektumok tárolására alkalmas (mivel a ColorInterval az Interval-ból származik, ezért azokat is legyen képes tárolni).

  • Legyen egy konstruktora, amely paraméterül vár egy számot. Ennyi Interval objektumra mutató pointernek foglajon dinamikusan helyet.

  • Definiáld felül a += operátort, amely egy paraméterül kapott Interval vagy ColorInterval objektumot (amelyet pointerként kap meg) teszi hozzá a tároltakhoz, ha még van hely - ha nincs, akkor jelezzen hibát. A += operátor működjön úgy, hogy a paraméterül kapott objektumról készítsen másolatot, és azt vegye hozzá a halmazhoz (legyen egy copy nevű virtuális függvénye az Interval és ColorInterval osztályoknak, ami másolatot készít róluk).

  • Készíts destruktort, amely felszabadítja a tárolt objektumokat, és a tárulásokra használt pointer tömböt.

  • Definiáld felül a suffix -- operátort, ami csinálja azt, hogy a legutoljára hozzávett elemet kiveszi a halmazból - megfelelő memóriakezeléssel.

  • Definiáld felül az ostream << operátorát, hogy azzal ki tudd íratni a tárolt intervallumokat. (Ehhez használd az Interval és ColorInterval print függvényét, és hogy jól működjön, tedd azokat virtuális függvénnyé.)

Készíts egy main függvényt, amely:

  • Létrehoz egy IntervalSet objektumot, amiben helyet foglaltat 10 intervallumnak.

  • Adj hozzá += operátorral 3 Interval és 3 ColorInterval objektumot.

  • Írasd ki << operátorral ( cout << … ).

  • Szabadítsd föl minden lefoglalt memóriaterületet.

Igazolványtartó tok

Hozz létre egy IgazolványtartóTok osztályt, ami Igazolvány objektumokat tud tárolni. Ezek lehetnek SzemélyiIgazolvány vagy sima Igazolvány objektumok.

  • Legyen egy konstruktora, amely paraméterül vár egy számot, ennyi lapos lesz a tok. A szám*2  Igazolvány objektumra mutató pointernek foglajon dinamikusan helyet (hiszen egy lap mindkét oldalára tehetünk igazolványt).

  • Definiáld felül a += operátort, amely paraméterül egy Igazolvány referenciát kap. A kapott igazolvány másolatát tárolja el a tömbben. Ha elfogyott a hely a tömbben, ne csináljon semmit.

  • Definiáld felül a függvényoperátort, amely paraméterben két számot vár, az első szám mondja meg, hogy melyik lapban lévő igazolvány érdekel, a második szám (ez csak 1 vagy 2 lehet, erre ügyelj!) pedig azt mondja meg, hogy a lap felső vagy oldalán lévő igazolványt szeretnénk megnézni. (Pl.: ha a 4, 2 paraméterekkel hívjuk meg a függvényt, az azt jelenti, hogy a 4. oldalon a hátulsó igazolványra vagyunk kíváncsiak, ami a 8. igazolvány lesz a tömbben (1. oldalon van az 1-2 igazolvány., 2. oldalon a 3-4. igazolvány, stb.) Ennek az igazolványnak hívjuk meg a leolvas() függvényét. Amennyiben nem létezik az adott helyen igazolvány, írja ki a függvény, az adott helyen nincs igazolvány.

  • Készíts egy valid() függvényt, amely az alábbiak szerint működjön: minden egy tömbelem tulajdonosát kérdezze le, és ha a nevek az összes létező igazolvány esetében megegyeznek, akkor térjen vissza igazzal, különben hamissal.

  • Definiáld felül az ostream << operátorát, aminek segítségével írasd ki azt, hogy hány igazolvány fér el a tömbben, valamint azt, hogy jelenleg hány darab van benne.

Készíts egy main függvényt, amely:

  • Létrehoz egy IgazolványtartóTok objektumot, amiben helyet foglaltat 10 igazolványnak.

  • Adj hozzá legalább 4 tetszőleges igazolvány objektumot

  • Használd a függvényoperátort.

  • Hívd meg a valid függvényt, írasd ki az eredményét.

  • Írasd ki << operátorral ( cout << … ).

  • Szabadítsd föl minden lefoglalt memóriaterületet.

Telefon katalógus

Hozz létre egy TelefonKatalógus nevű osztályt, ami Telefon objektumokat tud tárolni.

  • Legyen egy konstruktora, amely paraméterül vár egy számot. Ennyi Telefon objektumra mutató pointernek foglajon dinamikusan helyet.

  • Készíts egy add metódust (ami logikai értékkel tér vissza), amely a telefon katalógushoz hozzáadja a paraméterből érkező telefon objektumot (A telefon objektumról másolatot készítsünk, copy konstruktorral), egészen addig, amíg van van hely. Ha nincs már hely, ne csináljon semmit, csak térjen vissza false értékkel.

  • Definiáld felül a prefix ++ operátort, amely az összes telefon felhasználható internet mennyiségét megnöveli 100 megabájttal.

  • Definiáld felül a tömbindex operátort, amely térjen vissza a tárolt telefonok közül a paraméterben megadott indexűvel, amennyiben az létezik. Amennyiben nem, térjen vissza az utolsó tárolt indexen lévő telefonnal

  • Definiáld felül az ostream << operátorát, aminek segítségével írasd ki az összes tárolt telefon darabszámát, és a telefonokra egyesével hívja meg az adatok() függvényt.

  • Készíts destruktort, amely felszabadítja a tárolt objektumokat, és a tárulásokra használt pointer tömböt.

Készíts egy main függvényt, amely:

  • Létrehoz egy TelefonKatalógus objektumot, amiben helyet foglaltat 100 telefonnak

  • Adj hozzá 2 Telefon és 3 SzuperNetezőTelefon objektumot.

  • Írasd ki << operátorral ( cout << … ).

  • Hívd meg a ++ operátort.

  • Szabadítsd föl minden lefoglalt memóriaterületet.

Tanulmányi rendszer

Egészítsd ki a meglévő programot. Hozz létre egy ETRArmy nevű osztályt, ami ETR objektumok tárolására alkalmas.

  • Legyen egy konstruktora, amely paraméterül vár egy pozitív egész számot, ennyi ETR objektumra mutató pointernek foglaljon helyet dinamikusan.

  • Készíts destruktort, amely felszabadítja a tárolt objektumokat, és a tárolásukra használt tömböt.

  • Hozz létre egy init() függvényt, ami egy string tömböt vár, amelyek a létrehozandó ETR objektumok url-jét tartalmazzák. Ezek alapján inicializáld a tömböt (feltehetjük, hogy a paraméterként kapott tömb mérete pontosan akkora, mint ahány ETR elfér a saját tömbünkben)! Ügyelj rá, hogy ez a függvény csak első alkalommal működjön így. Ha már másodjára hívjuk meg, írja ki a képernyőre az alábbi szöveget: “Új ETR nem csatlakozhat a sereghez, és a meglévők is hamarosan Neptunná válnak!”.

  • Definiáld felül a függvény operátort, amely egy számot kap paraméterül, és törli a tömbből az azon a pozíción lévő ETR objektumot, továbbá kiírja a képernyőre, hogy “Egy ETR rendszert sikeresen eltávolítottunk, de aggodalomra semmi ok, hamarosan Neptunként visszatér közénk!”

  • Definiáld felül a tömbindex operátort, amely visszaadja a tömbnek a megfelelő indexű elemét, ha még ott ETR van. Ha már töröltük, akkor NULL-t adjon vissza, de írja ki a képernyőre, hogy “Itt már nincs ETR, kérlek nézz vissza később Neptunért, az egységes tanulmányi rendszerért!”

Készíts egy main függvényt, amely:

  • Létrehoz egy ETRArmy nevű osztályt, ami 3 db ETR objektumot tárol.

  • Hozz létre egy 3 méretű sztringtömböt, és tegyél bele 3 url-t.

  • Add hozzá ezt a 3 ETR-t az init() függvény segítségével.

  • Töröld egymás után mind a három ETR-t, majd ellenőrizd is, hogy tényleg törlődtek-e.

  • Szabadítsd fel a lefoglalt memóriaterületet

Hibrid Autók

Bővítsd ki az előző programodat egy AutoKolcsonzo nevű osztállyal, ami különböző típusú autókat tárol és egy kölcsönzőt reprezentál. Ez az osztály rendelkezzen az alábbi adattagokkal és metódusokkal:

  • Legyen egy konstruktora, ami paraméterben egy egész számot vár, a kölcsönző kapacitását (azaz, hány autó számára van helyük). Foglalj le dinamikus memóriafoglalással egy tömböt az autók számára (egy tömbben tárold a benzines és hibrid autókat is).

  • Definiáld felül a += operátort, aminek a jobb oldali operandusa egy autóra (benzines, vagy hibrid) mutató referencia. Ez az operátor felveszi a megadott autót a a kölcsönző kínálatába, ha van még szabad hely, egyébként nem csinál semmit. (Az eredeti autót teszi be, nem egy másolatot.)

  • Definiáld felül a tömbindex operátort, ami az autókölcsönzést valósítja meg. Ha van olyan indexű autó, akkor visszaadja azt az autót, kiveszi a tömbből, és kiírja a képernyőre, hogy “Jó utat a következő x km-en!” (ahol x a kikölcsönzött autó hatótávja). Ha nincs, akkor adjon vissza NULL-t, és írja ki, hogy “Nincs bent ilyen számú autó.”

  • Definiáld felül a << operátort, ami kiírja a kölcsönzőben bentlévő autók típusát és hatótávját, amihez a korábban megírt hatotav() metódust használod.

  • Készíts copy konstruktort és destruktort az AutoKolcsonzo osztályodhoz.

Írj egy main függvényt. Ebben

  • Hozz létre egy kölcsönzőt 5 autó kapacitással.

  • Hozz létre 3 autót (vegyesen benzinest és hibridet). Vedd fel ezeket az autókat a kölcsönződbe.

  • Kölcsönözz ki egy autót, majd próbálj kikölcsönözni egy nem létező indexű autót is.

  • << operátor felhasználásával írasd ki a kölcsönzőben található autókat.

Figyelj oda a dinamikus memóriafoglalással kapcsolatos teendőkre! Gondoskodj róla, hogy a HibridAuto esetén a helyes hatotav() metódus hívódjon meg.

Boltok

Bővítsd ki az előző feladatodat egy Plaza osztállyal, ami egy plázát fog jelképezni és tárolja a benne található üzleteket. Ennek az osztálynak az alábbi adattagjai és metódusai legyenek:

  • Legyen egy konstruktora, ami paraméterben az üres üzlethelységek számát várja, és létrehoz egy Bolt objektumokat tároló tömböt dinamikusan. (Egy tömbben tárold a hagyományos és az éjjel-nappal nyitvatartó boltokat.)

  • Definiáld felül az osztály *= operátorát, aminek a jobboldali operandusa egy bolt referencia, és beteszi a megadott boltot az első üres helyre, ha van. Ha nincs, akkor kiírja, hogy “Sajnáljuk, megteltünk.” és nem csinál semmit.

  • Definiáld felül a Bolt osztály ++ operátorát, ami növeli eggyel az aznapi látogatók számát.

  • Definiáld felül a függvényhívás operátort a Plaza osztályban, ami paraméterben egy órát és egy percet vár. A plázában található boltok nyitvatartása alapján megállapítja, hogy a pláza nyitva van-e még. Egészen addig nyitva van, amíg van benne legalább egy nyitvatartó üzlet. Ehhez használd fel a korábban megírt nyitvaE() metódust. Ha a pláza zárva (tehát minden bolt bezárt a megadott időpontig), akkor írd ki, hogy “Zárva vagyunk.” és a térj vissza hamis logikai értékkel. Egyébként írd ki a még nyitvatartó üzletek nevét és növeld meg a vásárlók számát eggyel (az előbb megírt ++ operátort használva) és térj vissza igaz értékkel.

Írj egy main függvényt, amiben:

  • Létrehozol egy Plaza objektumot és pont annyi üzletet, amennyi belefér. Ezeket “tedd bele” a plázába.

  • Próbáld ki tetszőleges időpontokra, hogy a pláza zárva vagy nyitva van-e?

  • Teszteld a programodat úgy, hogy csak hagyományos boltok vannak, és úgy is, hogy van legalább egy éjjel-nappali.

Figyelj oda a dinamikus memóriafoglalással kapcsolatos teendőkre! Gondoskodj róla, hogy az EjjelNappali bolt esetén a helyes nyitvaE() metódus hívódjon meg.