Objektum hierarchiája
Az osztályok hierarchiája az öröklés elvének megfelelő hierarchia, azaz írja be "ez egyfajta". Például "a munkavállaló egyfajta személy", "az autó" egyfajta "jármű". Ezzel szemben az objektumok hierarchiája egy hierarchia, amely az előfordulás elvén alapul; írja be "ez része ennek." Például: "növény - a növény egy része", "motor" - az "autó" része. Így a hierarchia alsóbb szintű objektumai magasabb szintű objektumok közé tartoznak, amelyek egy csoportnak számítanak.
Az iterátorok lehetővé teszik, hogy bizonyos műveleteket végezzen egy adott adatkészlet egyes elemeihez.
Egy ilyen ciklus végrehajtható az egész készletre, például a készlet összes elemének kinyomtatására, vagy olyan elem keresésére, amely megfelel bizonyos feltételeknek, amely esetben egy ilyen ciklus véget ér, amint a kívánt elem megtalálható.
Az iterátorokat speciális osztálykategóriás módszerekként fogjuk figyelembe venni, amelyek lehetővé teszik, hogy bizonyos tevékenységeket végezzen a csoportba tartozó összes objektum számára. Az iterátor egyik példája a Show mód.
Szeretnénk egy olyan iterátort, amely lehetővé tenné, hogy a csoport minden elemén elvégezzék a műveleteket, amelyeket nem az objektum egyik módszere határoz meg, hanem egy tetszőleges felhasználói funkciót. Ilyen iterátort lehet végrehajtani, ha ezt a függvényt egy függvény mutatójának átadja.
Adja meg a mutató típusát a funkcióhoz az alábbiak szerint:
typedef void (* PF) (TObject *,<дополнительные параметры>);
A funkciónak kötelező paramétere a TObject vagy a TObject * típus. amelyen keresztül egy objektumot továbbítanak neki, amelyhez bizonyos műveletek végrehajtásához szükséges.
Az iterátor módszer a következőképpen nyilvánul meg:
void TGroup :: ForEach (PF akció,<дополнительные параметры>);
cselekvés - az egyetlen kötelező paraméter egy olyan mutató, amelyre a csoport minden egyes elemére szükség van;
további paraméterek A hívott funkcióra átvitt paraméterek.
Ezután egy funkciómutatót definiálnak és inicializálják az iterátoron átadott függvénynek.
Ezután az iterátort meghívják például egy további int paraméterre, például:
Itt gr egy objektumcsoport.
A típusok dinamikus azonosítása.
A dinamikus típusú azonosítás jellemző azokon a nyelveken, amelyeken a polimorfizmus támogatott. Ezeken a nyelveken olyan helyzetek lehetségesek, amelyeknél az összeállítás szakaszában lévő objektum típusa ismeretlen.
A C ++-ban a polimorfizmust támogatják a hierarchiák, a virtuális függvények és a mutatók az alap osztályokhoz. Ebben az esetben az alaposztály-mutató használható vagy arra, hogy egy alap osztály objektumra mutasson, vagy egy olyan objektumra mutasson, amely ebbe az alaposztályba származik.
Hagyja, hogy a csoport különböző osztályú tárgyakat tartalmazzon, és csak bizonyos osztályú objektumok esetén végezzen műveletet. Ezután az iterátorban fel kell ismernünk a következő tárgy típusát.
A C ++ szabvány tartalmazza az RTTI (Run-Time Type Idendification) eszközöket - a dinamikus típusazonosítást. Ezeket az eszközöket a legfrissebb Borland C ++ rendszerekben (4.0 és újabb verziók) alkalmazzák.
Az objektum típusára vonatkozó információ a typeid operátorral érhető el, amelynek definíciója tartalmazza a fejlécfájlt
A typeid operátor két formája létezik:
A typeid operátor hivatkozást ad a type_info típusú objektumra.
A type_info osztályban a túlterhelt műveletek == és! = Adja meg a típusok összehasonlítását.
A név () függvény egy mutatót ad vissza a típusnévhez.
Van egy korlátozás. A typeid operátor csak olyan objektumokkal működik megfelelően, amelyeken virtuális függvények vannak definiálva. A legtöbb objektumnak van virtuális funkciója, ha csak azért, mert a romboló általában virtuális, hogy megszüntesse a származtatott osztályokkal kapcsolatos potenciális problémákat. Ha egy typeid operátort nem polimorf osztályra alkalmaznak (nincs virtuális függvény az osztályban), az egérmutatót vagy az alap típusának referenciáját kapja.
Ha a fordított típusú (* p), p = NULL, a kivétel fel van emelve bad_typeid
A munka sorrendje.
1. Adja hozzá a 2. laboratóriumi osztályok hierarchiáját a "csoport" osztályokhoz.
Például a FACULTY témakörben a "tanári", "hallgatói csoport", "tanszék" osztályokat kínálhat. Javasoljuk, hogy hozzon létre egy absztrakt osztály „egység”, amelyet az őse minden csoport és absztrakt osztály TObject. amely az egész hierarchia élén áll.
2. Írjon iterátor módszert az osztálycsoporthoz.
3. Írjon be egy olyan eljárást vagy függvényt, amelyet a csoporthoz tartozó összes objektum esetében hajt végre (lásd az alkalmazásban található példákat).
4. Írjon be egy demóprogramot, amelyen a csoportobjektumok létrehozása, megjelenítése és megsemmisítése, valamint az iterátor használata bizonyított.
1. Az osztálycsoportnak meg kell felelnie a 2. számú laboratóriumi osztályok hierarchiájának, azaz ezeknek az osztályoknak az objektumainak a csoporthoz kell tartoznia. Például az 1. változathoz a következő osztályhierarchia javasolható:
Tobjektum (rövidített osztály)
Személy (absztrakt osztály) Alépítmény (absztrakt csoport)