Boshqa tegishli mexanizmlar
Kompilyator tomonidan o'rnatilgan turlar, standart konversiyalar va translyatsiya / majburlash uchun taqdim etilgan polimorfizm to'liqligi uchun keyinroq muhokama qilinadi:
ular odatda intuitivdir (" bu " reaktsiyasini kafolatlaydi ),
ular talab qilinadigan va yuqoridagi mexanizmlardan foydalanishda tikuvsiz chegaraga ta'sir qiladi va
tushuntirish - muhimroq tushunchalardan befoyda chalg'itish.
Terminologiya Qo'shimcha tasnif
Yuqorida tavsiflangan polimorfik mexanizmlarni hisobga olgan holda, ularni har xil tasniflashimiz mumkin:
Polimorf tipdagi maxsus kod qachon tanlanadi?
Ish vaqti shuni anglatadiki, kompilyator dastur ishlay oladigan barcha turdagi kodlarni ishlab chiqarishi kerak va to'g'ri kod ish vaqtida olinadi ( virtual yuborish ).
Kompilyatsiya vaqti ma'lum bir kod turini tanlash kompilyatsiya vaqtida amalga oshirilishini bildiradi. Buning natijasi: aytaylik, dastur faqat f argumentlar bilan chaqirilgan int - ishlatilgan polimorf mexanizm va inlining variantlariga qarab, kompilyator har qanday kodni ishlab chiqarishdan qochishi mumkin f(double), yoki hosil qilingan kodni kompilyatsiya yoki bog'lanishning bir nuqtasida tashlab yuborish mumkin. . ( yuqoridagi barcha mexanizmlar, virtual yuborishdan tashqari )
Qaysi turlar qo'llab -quvvatlanadi?
Ad-hoc har bir turni qo'llab-quvvatlash uchun aniq kodni taqdim etishingizni anglatadi (masalan, ortiqcha yuklanish, shablonni ixtisoslashuvi); siz aniq "bu uchun" qo'llab-quvvatlash turini qo'shasiz ( maxsus ma'noda ), boshqa "bu" va ehtimol "bu" ham ;-).
Parametrik ma'no, siz har xil parametrlar uchun funktsiyani qo'llab -quvvatlash uchun hech narsa qilmasdan ishlatishga harakat qilishingiz mumkin (masalan, andozalar, makroslar). Ibratli kutgan andoza sifatida harakat vazifalari / operatorlari / bilan ob'ekt 1 , - bu sizga Ibratli bir Andoza / ishlarini qilish kerak, barcha bo'lib, aniq turi ahamiyati yo'q. C ++ 20 tomonidan kiritilgan "tushunchalar" bunday taxminlarni bildiradi va amalga oshiradi - qarang. Bu erda cppreference sahifasiga qarang .
Parametrik polimorfizm o'rdakni terishga imkon beradi - bu tushuncha Jeyms Uitkom Riliga tegishli bo'lib, u shunday degan edi: "Men o'rdak kabi yurgan, o'rdakdek suzayotgan va o'rdak kabi suzayotgan qushni ko'rsam, men bu qushni o'rdak deb atayman. "
template
void do_ducky_stuff(const Duck& x) { x.walk().swim().quack(); }
do_ducky_stuff(Vilified_Cygnet());
Do'stlaringiz bilan baham: |