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