Virtual metodlar
Virtual metodlar ( virtual funktsiya ) - In ob'ektga asoslangan dasturlash usul (funktsiya) sinfda qayta belgilanadigan sinf voris klasslari shuning uchun chaqiruv usulining aniq bajarilishi ish vaqtida aniqlanadi.Shunday qilib, dasturchiga aniq turni bilish shart emas ob'ekt virtual metodlarlar bilan u bilan ishlash: siz ob'ektni sinfga yoki usul e'lon qilingan sinfning merosiga tegishli ekanligini bilishingiz kerak. " Virtual " so'ziningingliz tilidan tarjimalaridan biri "haqiqiy" bo'lishi mumkin, bu ma'noga ko'ra to'g'ri keladi.
Foydalanish
Virtual metodlarlar - eng muhim amaliy usullardan biri polimorfizm . Ular taglik sinfi ob'ektlari bilan, shuningdek, uning avlodlari sinflarining predmetlari bilan ishlaydigan umumiy kodni yaratishga imkon beradi. Shu bilan birga, asosiy sinf ob'ektlar bilan ishlashning yo'lini belgilaydi va uning avlodlaridan har biri ushbu usulni aniq amalga oshirishi mumkin.
Ajratish usuli
Ba'zi dasturlash tillari (masalan, C ++ , C # ) bu usulning virtual ekanligini aniq ko'rsatib turishni talab qiladi. Boshqa tillarda (masalan, Java , Python ) barcha usullar sukut bo'yicha virtualdir (faqatgina bu mumkin bo'lgan usullar , masalan, kirish usulida Java usullarida xususiy ko'rinishi uchun qoidalar tufayli bekor qilinmaydi).
Asosiy sinf virtual metodlarni amalga oshirishni ta'minlamasligi mumkin, faqat uning mavjudligini e'lon qilishi mumkin. Amalga oshirilmaydigan bunday usullar "sof virtual" deb nomlanadi (tarjima Ingliz tili sof virtual ) yoki mavhum. Eng kamida bitta usulni o'z ichiga olgan sinf ham bo'ladi mavhum . Bunday sinfning ob'ekti yaratilmaydi (ba'zi tillarda ruxsat beriladi, lekin abstrakt usulni chaqirish xatolikka olib keladi). Abstrakt sinfning merosxo'rlari barcha mavhum uslublar uchun amaliyotni amalga oshirishi kerak, aks holda ular o'z navbatida mavhum sinflar bo'ladi. Faqat mavhum usullarni o'z ichiga olgan mavhum bir sinfga chaqiriladi interfeys .
Dastur
Virtual metodlarlarni chaqirish usuli "dinamik majburiy" deb ataladi. Bu shuni anglatadiki, dasturda ishlatiladigan metodning nomi ma'lum bir usulning kirish manziliga dinamik ravishda (ish vaqti bo'yicha) statik (kompilyatsiya vaqtida) emas, chunki kompilyatsiya vaqtida, odatda, mavjud bo'lgan usullarni qo'llash taklif etiladi.
Qilingan dasturlash tillarida dinamik ulanish odatda ishlatiladi virtual uslub jadvali , har bir sinf uchun derleyici tomonidan yaratilgan, kamida bitta virtual metodlari mavjud. Jadval elementlari ushbu sinfga to'g'ri keladigan virtual metodlari qo'llanmalariga nisbatan markerni o'z ichiga oladi (agar yangi virtual metodlar uskuna sinfiga qo'shilsa, uning manzili jadvalga qo'shiladi, agar virtual uslubning yangi ilovasi descendant sinfida yaratilgan bo'lsa, jadvaldagi tegishli maydon ushbu dasturning manzili bilan to'ldiriladi) . Shunday qilib, meros daraxti bo'yicha har bir virtual metodlarning manzili uchun virtual uslub jadvali ichida bir xil sobit ofset mavjud. Har bir ob'ekt ob'ekt yaratilganda boshlanadigan texnik maydonga ega. ko'rsatgich uning klassidagi virtual uslublar jadvalida. Ob'ektdan virtual metodlarni chaqirish uchun, mos keluvchi virtual uslub jadvali uchun ko'rsatgich olinadi va u erdan ma'lum bir qattiq ofset orqali, - bu sinf uchun ishlatiladigan usulni qo'llash bo'yicha ko'rsatgich. Foydalanishda virtual uslub jadvali chiziqli bo'lmaganligi sababli bir nechta meros holatini biroz murakkablashtiradi.
C ++ da virtual funktsiyaning misoli
Hayvonlar guruhining diagrammasi
Misol uchun Virtual va virtual bo'lmagan funksiyalar o'rtasidagi farqni ko'rsatadigan C ++ :
Asosiy sinfni nazarda tuting Hayvon (hayvon) virtual metodlarga ega bo'lishi mumkin ovqatlaning (mavjud). Subclass (bolalar sinf) Baliq (Baliq) bekor qilish usuli ovqat ( ) u subclass tomonidan qayta belgilanmaganidek emas Kurt (bo'ri), lekin qo'ng'iroq qilishingiz mumkin ovqat () sinf har bir misolni sinf Animal meros va xatti olish Ushbu subclassga mos keladigan ovqatni () kiriting .
Bu dasturchi sinf moslamalarni ro'yxatini ishlashga imkon beradi. Hayvon , har bir ob'ekt usulini chaqiradi (Muayyan ozuqa sifatida, ya'ni) kichik sinfiga joriy ob'ektga tegishli nima haqida o'ylab emas,) (eb.
C ++ da virtual funktsiyalarning qiziqarli tafsiloti xulq-atvor sukut argumentlari . Virtual funktsiyani sukut argumenti bilan chaqirsangiz, funktsiya tanasi haqiqiy ob'ektdan va argument qiymatlari turiga qarab olinadi ishoratlar yoki ko'rsatgich.
Do'stlaringiz bilan baham: |