Типтердің динамикалық теңестірілуі.
Типтің динамикалық теңестірілуі полиморфизмге сүйенетін тілдер үшін тән. Бұл тілдерде компиляция кезеңінде объект типі белгісіз болатын жағдайлар болуы мүмкін.
С++ тілінде полиморфизм кластар иерархиясы, виртуальді функциялар және базалық класқа көрсеткіштер арқылы сүйемелденеді.
Топ әртүрлі кластардың объектілерін қамти отырып, тек қана белгілі класс объектілеріне арналған кейбір әрекеттерді орындасын. Сонда біз итераторда кезекті объектінің типін тануымыз қажет.
С++ тілінің стандартына RTTI (Run-Time Type Idendification) типтердің динамикалық теңестірілу құралдары қосылған. Бұл құралдар Borland C++ соңғы жүйелерінде жүзеге асырылған.
Объект типінің анықтамасын typeid операторының көмегімен аламыз, ол тақырыптық файлында қамтылған.
Typeid операторының екі формасы бар:
typeid (объект)
typeid (тип аты)
typeid операторы сілтемені type_info типті объектіге қайтарады.
type_info класында қайта жүктелген == және != амалдары типтерді салымтыруды қамтамасыз етеді.
name () функциясы тип атына көрсеткішті қайтарады.
Бір шектеу бар. Typeid операторы тек виртуальді функциялары анықталған объектілермен ғана дұрыс жұмыс жасайды.
Мысалдар.
1.
#include
#include
class Base{
virtual void f(){};
//…
};
class Derived: public Base{
//…
};
void main()
{int i;
Base ob,*p;
Derived ob1;
cout<int шығарылады
p=&ob1;
cout<Derived шығарылады
}
2.
//басы жоғарыда
void WhatType(Base& ob)
{cout<< typeid(ob).name()<
}
void main()
{
Base ob;
Derived ob1;
WhatType(ob); // Base шығарылады
WhatType(ob1); // Derived шығарылады
}
3.
//басы жоғарыда
void main()
{
Base *p;
Derived ob;
p=&ob;
if(typeid(*p)==typeid(Derived)) cout<<“p Derived типті объектіге сілтейді”;
…
}
Достарыңызбен бөлісу: |