Gyakorló feladatok (7. hét)

Fontosabb kulcsszavak, fogalmak

  • öröklés
  • virtuális függvények
  • heterogén kollekció
  • generikus szerkezetek

Feladatok (egy korábbi ZH feladat alapján) megoldásokkal

  1. Micimackó, a legokosabb mackó a Százholdas Pagonyban, éppen az üres csuprok (Jar) hasznosításán töprengett, amikor rájött, hogy azokban különféle tárgyakat Object) lehet tartani. Így pl. ceruzát (Pencil), térképet (Map) és még mást is, de más éppen nem jutott eszébe. Azt azonban tudta, hogy minden, amit be akar tenni a csuporba, eltérő attribútumokkal rendelkezik. Mackó számára a térképet a neve (std::string), a ceruzát pedig a hossza (int) jellemzi a legjobban.
    Segítsen modellezni a feladatot Micimackónak! (Bagoly mesélt valami heterogén kollekcióról, de ezt sajnos Mackó nem értette meg.)
    Követelmény, hogy Mackó meg tudja mutatni a csuporba tett tárgyakat és azok attribútumát Robert Gidának. Ehhez a csupor show tagfüggvényét akarja használni, ami a csuporba tett tárgyak nevét és jellemzőit kiírja a paraméterként kapott std::ostream típusú objektumra. Ha a csupor összetörik, akkor a benne levő tárgyak is megsemmisülnek. Egy csuporba maximum 20 tárgy fér. A modellben megvalósítandó műveleteket az alábbi kódrészlettel mutatjuk be:
    Jar *j1 = new Jar;                // Ez lesz a csupor
    j1->add(new Map("Eszaki-sark"));  // Térkép létrehozása és berakása
    j1->add(new Pencil(3));           // Ceruza létrehozása és berakása 
    j1->show(std::cout);              // Csupor tartalmának megmutatása  
    delete j1;                        // Csupor és tartalmának megsemmisítése 
    

    Feltételezheti, hogy a Jar osztályból példányosított objektumot nem akarjuk paraméterként átadni, és értékadás jobb, ill. bal oldalán sem szerepel.

  2. Tervezzen meg és rajzoljon fel egy olyan osztályhierarchiát, ami alkalmas a feladat megvalósítására, és könnyen bővíthető újabb tárgyakkal! Az osztálydiagramban jelölje az adattagok és metódusok láthatóságát is, valamint a virtuális függvényeket is! A string osztályt nem kell lerajzolni, arra típusként hivatkozzon! Ügyeljen a helyes jelölésekre!
  3. Deklarálja C++ nyelven a Jar, Object és Map osztályokat! Csak a Jar osztály konstruktorát, destruktorát, valamint az add() és show() metódusát valósítsa meg!
  4. Alakítsuk át a csuprot úgy, hogy méretét a konstruktorban meg lehessen adni! Legyen lekérdezhető ez a méret a capacíty() tagfüggvénnyel, és legyen lekérdezhető a csuporban levő tárgyak száma a size() tagfüggvénnyel!
  5. Készítsen egy generikus osztályt, amivel az előző feladat Jar osztálya előállítható lenne. A sablon paraméterként vegye át az alaposztályt és a tároló méretét! Tételezze fel, hogy létezik az átadott osztálynak megfelelő show metódusa!
  6. Mutassa be sablon használatát!
Utolsó frissítés: 2018-03-21 17.20