Identificarea dinamică a tipului

Identificarea tipului dinamic (RTTI-Run-Time Type Identification) este tipică pentru limbile în care polimorfismul este suportat. În aceste limbi, sunt posibile situații în care tipul obiectului în etapa de compilare nu este cunoscut.







În C ++, polimorfismul este suportat prin ierarhii de clasă, funcții virtuale și indicatori către clasele de bază. În acest caz, pointerul clasei de bază poate fi folosit fie pentru a indica un obiect de clasă de bază, fie pentru a indica un obiect din orice clasă derivată din această clasă de bază.

Informații cu privire la tipul de obiect se obțin cu ajutorul operatorului de tip. când utilizați care ar trebui să conectați fișierul antet

Operatorul tipid are două forme:

1. typeid (obiect)

2. typeid (type_name)

Operatorul typeid returnează o referință la un obiect de tip type_info.

Următorii membri deschisi sunt definiți în clasa type_info:

operatorul bool == (const tip_infoob) const;

operatorul bool! = (const tip_infoob) const;

const char * nume () const;

Operații supraîncărcate == and! = Furnizează o comparație a tipurilor.

Funcția nume () returnează un pointer la numele de tip.

Operatorul tipid are o restricție. Funcționează corect numai cu obiecte care au funcții virtuale definite. Atunci când un operator typeid este aplicat unei clase nepolimorfe (nu există nici o funcție virtuală în clasă), se obține un pointer sau o referință a tipului de bază.

folosind namespace std;

Programul definește un vector, este umplut cu numere aleatorii și sortat.

Ca o lucrare independentă, scrieți un șablon pentru funcția de sortare rapidă a secvențelor de orice tip.

Containerele asociative reprezintă o generalizare a conceptului de matrice asociativă.

O matrice asociativă este una dintre cele mai utile și mai universale tipuri definite de utilizator. De fapt, în limbile care se ocupă în principal de procesarea textului și a simbolurilor, acesta este adesea un tip încorporat.

O matrice asociativă, numită adesea o hartă și uneori un dicționar, conține perechi de valori. Cunoscând o valoare numită cheie, putem accesa o altă valoare, numită o valoare mapată.







O matrice asociativă poate fi reprezentată ca o matrice pentru care indexul nu trebuie să aibă un tip întreg:

șablon Prof. univ

V operatorul [] (const K);

Aici operatorul [] returnează o referință la elementul V care corespunde cheii K.

STL conține două tipuri de containere, construite ca matrice asociative: hartă și multimap, set și multiset. setset și multiset pot fi considerate ca matrice asociative degenerate, în care cheia nu corespunde nici unei valori

(adică, setul conține câteva chei).

Porturile hartă și multimap

Aceasta este o secvență de perechi (cheie, valoare), care oferă o valoare rapidă prin cheie. Containerul de hartă oferă iteratori bidirecționali.

Containerul de hartă necesită ca pentru tipurile cheie să existe o operație "<”. Он хранит свои элементы отсортированными по ключу так, что перебор происходит по порядку.

Specificația șablon pentru clasa de hartă:

șablon,

class Allocator = alocator> clasa std :: harta

Următoarele constructori sunt definite în clasa de hartă:

harta explicită (const c = Comp (),

const Allocator a = Alocator ());

hartă (harta const ob);

șablon hartă (În primul rând, Initer last, const Comp c = Comp (), const Alocator a = Alocator ());

Prima formă este constructorul unui container asociativ gol. Al doilea este constructorul de copiatoare. Al treilea este constructorul containerului asociativ care conține gama de elemente.

Operația de atribuire este definită în clasă:

hartă operator = (harta const);

Următoarele operații de comparare sunt de asemenea definite: ==, <, <=. =,>,> =.

Perechile cheie / valoare sunt stocate în container ca obiecte de tip pereche. Perechea de tip este o clasă, mai exact un șablon de clasă.

șablon struct pereche

typedef Key TFirst; // tipul de cheie

tippedef V TSecond; // tipul de valoare

pereche (const Key x, const V y): prima (x), a doua (y)<>

șablon pereche (pereche const ob): prima (ob.first), a doua (ob.second)<>

Ultimul constructor există pentru a permite conversia în inițializator. De exemplu:

pereche f (char c, int i)

Puteți crea perechi cheie / valoare nu numai cu constructorii perechi, ci și cu funcția make_pair. care creează obiecte de tip pereche, folosind tipuri de date ca parametri.

șablon pereche

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

Avantajul acestei funcții este că permite compilatorului să recunoască automat tipurile de obiecte destinate stocării și nu este necesar să le specificați în mod explicit. Astfel, harta este o secvență.

În ceea ce privește punerea în aplicare a containerului hartă, atunci acesta va pus în aplicare, cel mai probabil, folosind un formular copac, și cartografierea iteratori oferi o cale de a trece pe un copac. Această implementare oferă o căutare rapidă a valorii de către cheie.







Articole similare

Trimiteți-le prietenilor: