Программалау оқулық Алматы, 012 Қазақстан Республикасы Білім жəне ғылым министрлігінің «Оқулық»


ЕСКЕРТУ RTTI ақпаратын қолдану үшін программаға



Pdf көрінісі
бет227/465
Дата09.01.2023
өлшемі3,66 Mb.
#60709
түріПрограмма
1   ...   223   224   225   226   227   228   229   230   ...   465
Байланысты:
аибм сплюс

ЕСКЕРТУ
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); // "Берілген С класы емес" 
// хабарламасы шығарылады


Достарыңызбен бөлісу:
1   ...   223   224   225   226   227   228   229   230   ...   465




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет