Віртуальний метод або віртуальна функція — метод об'єкта в об'єктноорієнтованому програмуванні, різний для базового класу і класу нащадка.
Концепція віртуальної функції розв'язує наступну проблему:
У ООП, якщо клас-нащадок наслідується від базового класу, об'єкт екземпляр класу-нащадка може використовуватись або як екземпляр батьківського класу (бути приведеним до батьківського класу), або як екземпляр класу-нащадка. Якщо у класі-нащадку є функції, що перекривають (мають таку ж сигнатуру) функції із батьківського класу, то поведінка при виклику таких методів (при використанні даного об'єкта як екземпляра батьківського класу) є невизначеною.
Відмінність між віртуальністю і не віртуальністю функцій вирішує цю невизначеність. Якщо функція описана як віртуальна у базовому класі, тоді буде викликана функція із класу нащадка (якщо така існує). Якщо вона не віртуальна, тоді — із батьківського класу.
Реалізація
Техніка виклику віртуальних методів називається ще «динамічним (пізнім) зв'язуванням». Ідеться про те, що ім'я методу, використане в програмі, зв'язується з адресою входу конкретного методу динамічно (під час виконання програми), а не статично (під час компіляції), оскільки в момент компіляції, в загальному випадку, неможливо визначити, яка з чинних реалізацій методу буде викликана[].
У компільованих мовах програмування динамічне зв'язування виконується зазвичай з використанням таблиці віртуальних методів, яка створюється компілятором для кожного класу, що має хоча б один віртуальний метод. В елементах таблиці знаходяться вказівники на реалізації віртуальних методів, що відповідають даному класу (якщо в класі-нащадку додається новий віртуальний метод, його адреса додається в таблицю, якщо в класі-нащадку створюється нова реалізація віртуального методу — відповідне поле в таблиці заповнюється адресою цієї реалізації). Таким чином, для адреси кожного віртуального методу в дереві спадкоємства є одне, фіксоване зміщення в таблиці віртуальних методів. Кожен об'єкт має технічне поле, яке при створенні об'єкта ініціалізується покажчиком на таблицю віртуальних методів свого класу. Для виклику віртуального методу з об'єкта береться покажчик на відповідну таблицю віртуальних методів, а з неї, за відомим фіксованому зсуву, — покажчик на реалізацію методу, використовуваного для даного класу. При використанні множинного спадкоємства ситуація дещо ускладнюється внаслідок того, що таблиця віртуальних методів стає нелінійною[].
Див. також
Ця стаття не містить . (листопад 2016) |
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Virtualnij metod abo virtualna funkciya metod ob yekta v ob yektnooriyentovanomu programuvanni riznij dlya bazovogo klasu i klasu nashadka Koncepciya virtualnoyi funkciyi rozv yazuye nastupnu problemu U OOP yaksho klas nashadok nasliduyetsya vid bazovogo klasu ob yekt ekzemplyar klasu nashadka mozhe vikoristovuvatis abo yak ekzemplyar batkivskogo klasu buti privedenim do batkivskogo klasu abo yak ekzemplyar klasu nashadka Yaksho u klasi nashadku ye funkciyi sho perekrivayut mayut taku zh signaturu funkciyi iz batkivskogo klasu to povedinka pri vikliku takih metodiv pri vikoristanni danogo ob yekta yak ekzemplyara batkivskogo klasu ye neviznachenoyu Vidminnist mizh virtualnistyu i ne virtualnistyu funkcij virishuye cyu neviznachenist Yaksho funkciya opisana yak virtualna u bazovomu klasi todi bude viklikana funkciya iz klasu nashadka yaksho taka isnuye Yaksho vona ne virtualna todi iz batkivskogo klasu RealizaciyaTehnika vikliku virtualnih metodiv nazivayetsya she dinamichnim piznim zv yazuvannyam Idetsya pro te sho im ya metodu vikoristane v programi zv yazuyetsya z adresoyu vhodu konkretnogo metodu dinamichno pid chas vikonannya programi a ne statichno pid chas kompilyaciyi oskilki v moment kompilyaciyi v zagalnomu vipadku nemozhlivo viznachiti yaka z chinnih realizacij metodu bude viklikana dzherelo U kompilovanih movah programuvannya dinamichne zv yazuvannya vikonuyetsya zazvichaj z vikoristannyam tablici virtualnih metodiv yaka stvoryuyetsya kompilyatorom dlya kozhnogo klasu sho maye hocha b odin virtualnij metod V elementah tablici znahodyatsya vkazivniki na realizaciyi virtualnih metodiv sho vidpovidayut danomu klasu yaksho v klasi nashadku dodayetsya novij virtualnij metod jogo adresa dodayetsya v tablicyu yaksho v klasi nashadku stvoryuyetsya nova realizaciya virtualnogo metodu vidpovidne pole v tablici zapovnyuyetsya adresoyu ciyeyi realizaciyi Takim chinom dlya adresi kozhnogo virtualnogo metodu v derevi spadkoyemstva ye odne fiksovane zmishennya v tablici virtualnih metodiv Kozhen ob yekt maye tehnichne pole yake pri stvorenni ob yekta inicializuyetsya pokazhchikom na tablicyu virtualnih metodiv svogo klasu Dlya vikliku virtualnogo metodu z ob yekta beretsya pokazhchik na vidpovidnu tablicyu virtualnih metodiv a z neyi za vidomim fiksovanomu zsuvu pokazhchik na realizaciyu metodu vikoristovuvanogo dlya danogo klasu Pri vikoristanni mnozhinnogo spadkoyemstva situaciya desho uskladnyuyetsya vnaslidok togo sho tablicya virtualnih metodiv staye nelinijnoyu dzherelo Div takozhTablicya virtualnih metodiv Virtualne uspadkuvannya Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno listopad 2016 Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi