Dinamikus típusú azonosítás

A dinamikus típusazonosítás (RTTI-Run-Time Type Identification) 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.

Az objektum típusára vonatkozó információ a typeid operátor segítségével érhető el. ha használni szeretné a fejlécfájlt

A típusazonosítónak két formája van:

1. typeid (objektum)

2. typeid (type_name)

A typeid operátor hivatkozást ad a type_info típusú objektumra.

A következő nyílt tagok a class_info típusban vannak megadva:

bool operátor == (const type_infoob) const;

bool operátor! = (const típusú_infoob) const;

const char * név () const;

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.

A typeid operátor egy korlátozással rendelkezik. Csak olyan objektumokkal működik megfelelően, amelyeken virtuális függvények vannak definiálva. 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 alaptípus referenciáját kapja meg.

névtér std;

A program egy vektort határoz meg, véletlen számokkal tele van és sorba rendezve.

Mint önálló munka, írjon sablont bármilyen típusú szekvencia gyors sorba rendezésére.

Az asszociatív konténerek az asszociatív tömb fogalmának generalizálása.

Az asszociatív tömb az egyik leghasznosabb és univerzális típus, amelyet a felhasználó határoz meg. Valójában olyan nyelveken, amelyek elsősorban szöveges és szimbólum feldolgozással foglalkoznak, ez gyakran beágyazott típus.

Az asszociatív tömb, amelyet gyakran térképnek neveznek, és néha egy szótárnak is tartalmaz pár értékeket. Ha egy kulcsot nevezünk, akkor elérhetjük a másikat, amit leképezett értéknek nevezhetünk.

Egy asszociatív tömbet egy tömbként lehet ábrázolni, amelyhez az indexnek nem kell egész számra kiterjednie:

sablon osztály Assoc

V operátor [] (const K);

A (z) [] operátor visszaküldi a K kulcsnak megfelelő V elemet.

Az STL két típusú konténert tartalmaz, asszociatív tömböként: térkép és multimap, set és multiset. a forset és a multiset degenerált asszociatív tömböknek tekinthető, amelyekben a kulcs nem felel meg semmilyen értéknek

(vagyis a készlet néhány kulcsot tartalmaz).

A térkép és a multimap konténerek

Ez egy pár sor (kulcs, érték), amely gyors hozzáférést biztosít a kulcshoz. A térképtartó kétirányú iterátort kínál.

A térképtartály megköveteli, hogy a kulcstípusoknál a művelet "<”. Он хранит свои элементы отсортированными по ключу так, что перебор происходит по порядку.

A térképosztály sablon specifikációja:

sablon,

Allocator = osztó> class std :: térkép

A térképosztályban a következő konstruktorok vannak meghatározva:

explicit térkép (const Comp c = Comp (),

const Allocator a = Allocator ());

térkép (const térkép ob);

sablon térkép (InIter első, Utolsó, const Comp c = Comp (), const Allocator a = Allocator ());

Az első forma az üres asszociatív tároló konstruktora. A második a másolat készítője. A harmadik az elemtartományt tartalmazó asszociatív tartály konstruktora.

A hozzárendelési művelet az osztályban van meghatározva:

térkép operator = (const map);

Az alábbi összehasonlítási műveletek is meg vannak határozva: ==, <, <=. =,>,> =.

A kulcs / érték párokat a tartályban páros típusú objektumokként tárolják. A típuspár egy osztály, pontosabban egy osztály sablon.

sablon struktur pár

typedef Key TFirst; // kulcs típusa

typedef V TSecond; // értéktípus

pár (const Key x, const V y): első (x), második (y)<>

sablon pár (const pár ob): első (ob.first), második (ob.second)<>

Az utolsó konstruktor létezik, hogy lehetővé tegye az átalakítást az inicializálóban. Például:

pár f (char c, int i)

Nem hozhat létre kulcs / érték párokat nemcsak a pár konstruktőrökkel, hanem a make_pair funkcióval is. amely a típusú pár objektumokat hoz létre, paramétert használva az adattípusokat.

sablon pár

std :: make_pair (const T1 t1, const T2 t2)

Ennek a funkciónak az az előnye, hogy lehetővé teszi a fordító számára, hogy automatikusan felismerje a tárolásra szánt objektumok típusát, és nem kell kifejezetten megadnia azokat. Így a térkép egy szekvencia.

Ami a térkép konténer megvalósítását illeti, valószínűleg egyfajta fa felhasználásával valósul meg, és a térképpel ellátott iterátorok bizonyos módon áthaladnak a fán. Ez a megvalósítás gyorsan megkeresi az értéket a kulcs segítségével.

Kapcsolódó cikkek