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


Vtbl кестесіне əрбір объектінің сілтеме жасайтын жасырын қосымша  vptr



Pdf көрінісі
бет202/466
Дата20.07.2022
өлшемі3,66 Mb.
#37798
түріПрограмма
1   ...   198   199   200   201   202   203   204   205   ...   466
Байланысты:
pavlovskaia-jogargy-dengeili

Vtbl
кестесіне əрбір объектінің сілтеме жасайтын жасырын қосымша 
vptr
 
деп аталатын өрісі болады. Ол объект құру кезінде конструктор көмегімен 
толтырылады (бұл үшін компилятор конструктор тұлғасының бастапқы 
жағына соған сəйкес нұсқауларды қосады).
Компиляция кезеңінде виртуалды əдістерге жасалған сілтемелер 
vptr
объектісі арқылы
 vtbl
кестесін пайдалану əрекеттеріне алмастырылады, ал 
программаның орындалуы кезеңінде əдісті пайдалану кезінде оның адресі 


224
кестеден таңдалып алынады. Осылайша, қарапайым əдістер мен функциялар-
мен салыстырғанда, виртуалды əдісті шақыру кестеден əдіс адресін алудың 
қосымша кезеңі арқылы жүзеге асырылады. Бұл программаның орындалуын 
бірқатар баяулатады.
Динамикалық объектіге бөлінген жадының дұрыс босатылуын қамтамасыз 
ету үшін, деструкторларды виртуалды етіп құру ұсынылыды, өйткені 
мұндайда кез келген уақытта объектінің нақты типіне сəйкес келетін деструк-
тор таңдалып алынады. Деструктор 
delete
операциясына 
size_t
типіндегі 
объектінің өлшемін жібереді. Егер өшірілетін объект туынды болса жəне 
оның құрамында виртуалды деструктор анықталмаса, онда жіберілген объект 
өлшемі дұрыс болмауы мүмкін. 
Əдісті виртуалды жасаудың нақты ережесі жоқ. Туынды класта қайта 
анықталу ықтималдығы бар əдістерді виртуалды ретінде жариялау туралы 
ұсыныс қана беруге болады. Барлық иерархия деңгейлерінде өзгеріссіз қалатын 
немесе туынды кластар қолданбайтын əдістерді виртуалды етудің қажеті жоқ. 
Басқа жағынан алғанда, иерархияны жобалау кезінде базалық кластардың 
қандай жолмен кеңейтілетінін алдын ала болжау əрқашанда мүмкін бола 
бермейді (əсіресе кластар кітапханаларын жобалағанда), ал əдісті виртуалды 
ретінде жариялау икемділік пен кеңейту мүмкіндігін қамтамасыз етеді. 
Соңғы жағдайды түсіндіру үшін 
draw
əдісін шақыру объектінің орнын 
ауыстыру əдісінен орындалады деп есептейік. Егер орын ауыстыру əдісінің 
мəтіні орны ауыстырылатын объект типіне байланысты болмаса (барлық 
объектілердің орын ауыстыру принциптері бірдей болғандықтан, ал суреттеу 
үшін нақты əдіс шақырылатындықтан), туынды кластарда бұл əдісті қайта 
анықтаудың қажеті жоқ жəне оны виртуалды əдіс ретінде сипаттамауға бо-
лады. Егер 
draw
əдісі виртуалды болса, орын ауыстыру əдісі қайта компиля-
циялаусыз кез келген туынды класс объектілерімен (тіпті оны жазу кезінде 
белгісіз болған объектілермен де) жұмыс істей алады.
Виртуалды механизм тек объектілерге нұсқауыштарды немесе сілтемелерді 
қолдану кезінде ғана жұмыс істейді. Нұсқауыш немесе сілтеме арқылы 
анықталып, виртуалды əдістерді қамтитын объект полиморфты деп атала-
ды. Мұндайдағы полиморфизмнің мəні – əдіске бір ғана хабарласу арқылы 
əрбір уақыт мезетінде нұсқауыш сілтеме жасайтын типке байланысты əртүрлі 
əрекеттер орындалады. 


Достарыңызбен бөлісу:
1   ...   198   199   200   201   202   203   204   205   ...   466




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

    Басты бет