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
-
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.
-
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!
-
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!
- 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!
-
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!
-
Mutassa be sablon használatát!
Utolsó frissítés: 2018-03-21 17.20