ЕСКЕРТУ RTTI ақпаратын қолдану үшін программаға
тақырыптық файлын қосу
керек. Сонымен қатар, компилятордың соған сəйкес режимі де орнатылуы тиіс.
Полиморфты объект үшін
dynamic_cast операциясының жүзеге асыры-
луы айтарлықтай тиімді болады, өйткені объектінің типі туралы ақпаратқа
сілтеме виртуалды əдістер кестесіне енгізіледі де, оған қол жеткізу жеңіл іске
асырылады.
Логикалық тұрғыдан алғанда да, объектінің полиморфты болу талабы
дұрыс шешім болып табылады: егер кластың виртуалды əдістері болмаса,
нұсқауыштың нақты түрдегі типін білместен, оны қауіпсіз түрде қолдану
мүмкін емес. Ал егер тип белгілі болса, онда
dynamic_cast операциясын
қолданудың қажеті жоқ.
Нұсқауышқа
dynamic_cast операциясын қолданудың нəтижесін
əрқашанда нақты түрде тексеру керек. Төмендегі мысалда
В полиморфты
базалық класы жəне одан туынды болып келетін, құрамында
f2 функция-
сы анықталған
С класы сипатталған.
demo функциясынан туынды класс
объектісіне нұсқауыш берілген жағдайда ғана
f2 функциясын
demo функ-
циясынан шақыру үшін түрлендіру нəтижесінің тексерілуі орындалатын
dynamic_cast операциясы қолданылады:
#include #include class B{ public: virtual void f1(){}; }; class C: public B{ public: void f2(){cout << "f2";}; }; void demo(B* p){ C* c = dynamic_cast(p); if (c) c->f2(); else cout << "Берілген С класы емес"; } int main(){ B* b = new B; demo(b); // "Берілген С класы емес" // хабарламасы шығарылады