Utilizând identificarea de tip run-time (RTTI), puteți determina tipul obiectului în timpul rulării. Pentru aceasta, folosiți funcția typeid. Pentru a utiliza această funcție, trebuie să includeți tipul de fișier headerinfo.h. Forma generală a intrării de tip este:
Aici obiectul este un obiect al cărui tip trebuie determinat. Funcția typeid returnează o referință la un obiect de tipul typeinfo care descrie tipul obiectului obiect. (În proiectul de standard C ++, acest tip se numește type_info.) Clasa typeinfo definește următorii membri publici:
operatorul bool == (const typeinfo ob) const;
operatorul bool! = (const typeinfo ob) const;
bool înainte (const typeinfo ob) const;
const char * nume () const;
Operatori supraîncărcați == and! = Oferiți o comparație a tipurilor. Funcția anterior () returnează adevărat dacă obiectul apelat este mai mare în ierarhia de obiecte decât obiectul utilizat ca parametru. Funcția înainte () este destinată, în cea mai mare parte, utilizării interne. Valoarea returnată nu are nimic de-a face cu ierarhia sau moștenirea clasei. Funcția nume () returnează un pointer la numele de tip.
Atunci când funcția typeid este aplicată unui pointer la clasa de bază a unei clase polimorfe, ea returnează automat tipul obiectului indicat de pointer, inclusiv orice clasă derivată din clasa de bază. (Așa cum am menționat deja, o clasă polimorfă este o clasă care conține cel puțin o funcție virtuală.)
NOTĂ: indicatorul trebuie să fie dereferențiat. De asemenea, trebuie să setați modul de suport RTTI în opțiunile compilatorului.
Următorul program demonstrează utilizarea funcției tipide
// exemplu de utilizare a typeid
#include
#include
clasa BaseClass int a, b;
virtual void f () <>; // BaseClass polimorfic
>;
clasa Derived1: public BaseClass int i, j;
>;
clasa Derived2: public BaseClass int k;
>;
int main ()
int i;
BaseClass * p, baseob;
Derived1 ob1;
Derived2 ob2;
// se afișează mai întâi numele tipului încorporat
cout <<"Typeid of i is ";
cout <
p = &baseob;
cout <<"p is pointing to an object of type ";
cout <
cout <<"p is pointing to an object of type ";
cout <
cout <<"p is pointing to an object of type ";
cout <
>
Programul afișează pe ecran următorul rezultat:
Tipul lui i este int
p indică un obiect de tip
p indică un obiect de tipul Derived1
p indică un obiect de tipul Derived2
RTTI nu este instrumentul folosit de niciun program. Cu toate acestea, atunci când lucrați cu tipuri polimorfe, vă permite să cunoașteți tipul de obiect în orice situație.