Subtip polimorfizm (aka inklyuziya) yangi turlarga algoritm / funktsiyani yangilamasdan ishlashga imkon beradi, lekin ular bir xil asosiy sinfdan bo'lishi kerak (virtual yuborish)
1 - andozalar juda moslashuvchan. SFINAE (shuningdek qarang ) parametrik polimorfizm uchun bir nechta taxminlar to'plamini samarali tarzda beradi. Masalan, siz ishlov berilayotgan ma'lumotlar turi elementni o'z ichiga olganda , siz bitta funktsiyani ishlatishingizni kodlashingiz mumkin, aks holda kerak bo'lmagan boshqa funktsiyani (lekin, ehtimol, qandaydir tarzda zarar ko'radi - masalan, sekinroq yoki foydali jurnalni yozmasdan). xabar). Shablon ma'lum parametrlar bilan yaratilganida, ba'zi parametrlarni parametrik ( shablonning qisman ixtisoslashuvi ) yoki qoldirmaslik ( to'liq ixtisoslashuv ) holatida siz odatiy xatti -harakatni belgilashingiz mumkin . std::enable_if .size().size()strlen()
"Polimorfik"
Alf Shtaynbaxning ta'kidlashicha, C ++ standartida polimorfizm faqat virtual dispetcherlik yordamida ish vaqti polimorfizmini bildiradi. Umumiy tarkibi Ilmiy. C ++ yaratuvchisi Bjarne Stroustrup lug'atiga ko'ra, yanada kengroq ( http://www.stroustrup.com/glossary.html ):
polimorfizm - har xil turdagi ob'ektlar uchun yagona interfeysni ta'minlash. Virtual funktsiyalar asosiy sinf tomonidan taqdim etilgan interfeys orqali dinamik (ish vaqti) polimorfizmini ta'minlaydi. Haddan tashqari yuklangan funktsiyalar va andozalar statik (kompilyatsiya vaqtida) polimorfizmni ta'minlaydi. TC ++ PL 12.2.6, 13.6.1, D&E 2.9.
Bu javob, xuddi savol kabi, C ++ xususiyatlarini Komp terminologiyasiga bog'laydi. Ilmiy.
Muhokama
C ++ standarti "hamjamiyat" ga qaraganda "polimorfizm" ning tor ta'rifini ishlatadi. Fantastika. Uchun moslashish bilan ta'minlash uchun sizning tinglovchilarga ...
aniq terminologiyadan foydalanib ("biz bu kodni boshqa turlar uchun qayta ishlata olamizmi?" yoki "biz bu kodni polimorf qila olamizmi?" emas, balki "virtual yuborishni ishlata olamizmi?") va / yoki
ularning terminologiyasini aniq belgilab beradi.
Aytgancha, ajoyib C ++ dasturchisi bo'lish uchun polimorfizm aslida siz uchun nima qilishini tushunish muhim ...
"algoritmik" kodni bir marta yozish va keyin uni ko'plab ma'lumotlar turlariga qo'llash imkonini beradi
... va keyin har xil polimorf mexanizmlar sizning haqiqiy ehtiyojlaringizga qanday mos kelishi haqida juda ehtiyot bo'ling.
Ish vaqti polimorfizmi mos keladi:
kirish ma'lumotlari zavod usullari bilan qayta ishlanadi va Base*s bilan ishlov berilgan ob'ektlarning heterojen to'plami sifatida qaytariladi.
konfiguratsiya fayllari, buyruq satri kalitlari, foydalanuvchi interfeysi sozlamalari va boshqalarga asoslangan ish vaqtida tanlangan dastur.
Amalga oshirish vaqti ish vaqtida o'zgarib turardi, masalan, davlat mashinasi modeli uchun.
Ish vaqti polimorfizmi uchun aniq haydovchi bo'lmasa, kompilyatsiya vaqtining variantlari ko'pincha afzal ko'riladi. O'ylab ko'ring:
shablonli sinflarning kompilyatsiya deb ataladigan tomoni ish vaqtida yog 'interfeyslarining ishlamay qolishiga qaraganda afzalroqdir
SFINAE
CRTP
optimallashtirish (ularning ko'piga o'lik kodni kiritish va o'chirish, pastadirni ochish, yig'ilishga asoslangan statik massivlar kiradi)
__FILE__,, __LINE__String harflari va boshqa o'ziga xos xususiyatli makrolarning birlashtirilishi
makro shablonlari va semantik testlardan foydalanish qo'llab -quvvatlanadi, lekin qo'llab -quvvatlash usulini sun'iy ravishda cheklamang (virtual jo'natish odatdagidek, a'zolar funktsiyasiga to'liq mos kelishini talab qiladi)
4-Mavzu: Funktsiya va sinf shablonlari
Do'stlaringiz bilan baham: |