Amallarni qayta yuklash. Sinflarda shablonlarni ishlatish haqida gapirishdan oldin, amallarni qayta yuklash haqida to’xtalib o’tmasdan iloji yo’q.
Amallarni qayta yuklaganda, quyidagi cheklovlarni hisobga olish kerak:
1. Quyidagi amallarni qayta yuklash taqiqlanadi:
sizeof() – argument o’lchamini aniqlash;
. (nuqta) – obyekt komponentlarini tanlash;
?: – shart amali;
:: – ko’rinish sohasini aniqlash;
.* - ko'rsatkich orqali sinf komponentini tanlash;
# va ## - preprotsessor amallari.
2. Amallarni faqat yangi ma'lumotlar turi uchun qayta yuklash mumkin - siz o'rnatilgan turdagi operatsiyani qayta yuklay olmaysiz. C++ da enum, union, struct va class konstruksiyalari yordamida yangi turdagi ma’lumotlar shakllanishi mumkin.
3. Qayta yuklangan amalning ustuvorligini va operandlar sonini o'zgartirish mumkin emas. Birlik operatsiya bitta operand, binar - ikkita operandga ega bo'lishi kerak; standart parametrlarga ruxsat berilmaydi. Operandlarning aniq soniga ega bo'lmagan yagona operatsiya bu funksiyani chaqirish operatsiyasi (). "+", "-", "*", "&" operatsiyalari ham unar, ham binary sifatida qayta yuklanishi mumkin.
4. Amallarni mustaqil tashqi funksiyalar sifatida (faqat bu qayta yuklash usuli enum uchun ruxsat etiladi) yoki sinf usullari sifatida qayta yuklanishi mumkin.
To'rtta amal:
- o’zlashtirish
- funksiyani chaqirish ();
- indekslash [];
- ko'rsatkich orqali kirish ->;
faqat sinf metodlari sifatida qayta yuklanishi mumkin. Asosan, bu amallarni enum konstruktsiyasi uchun qayta yuklash mumkin emas.
5. Agar amal sinf metodi sifatida qayta yuklangan bo'lsa, u holda chap (yoki faqat) argument majburiy ravishda amal qayta yuklangan sinf obyekti bo'ladi.
Sinf metodlar bilan qayta yuklash amallari. Metodlar bitta parametrga ega – joriy obyekt jimlik bo'yicha aniqlanadi. Yagona argument bo'lgan joriy obyektda unar amallar bajariladi. Shuning uchun, sinf metodlari sifatida qayta yuklangan binar amallar parametrlarga ega emas. Sinf metodi sifatida amalga oshirilgan unar amal prototipi quyidagicha bo’ladi:
operator@() turi;
Bu yerda @ - amal belgisi. Qaytish qiymati har qanday turdagi bo'lishi mumkin, shu jumladan aniqlanayotgan sinf ko’rinishda ham. Amaliyot obyektga qiymat, mos yozuvlar yoki ko'rsatkichni qaytarishi mumkin. Qaytish turi o'rniga voidni belgilashga ruxsat beriladi.
Postfiksni inkrement va decrement amallari bu qoidadan istisno hisoblanadi. Postfiks amalini prefiks amalidan farqlash uchun postfiks shaklida int tipidagi fiksirlangan parametr ko'rsatilgan, u aslida ishlatilmaydi.
Inkrement (va dekrement) prefiks shakli prototipga ega bo'lishi kerak
tip& operator@();
Postfiksni inkrement (va dekrement) amali prototipga ega bo'lishi kerak
tip operator@(int);
tip – bu "sinf_nomi" bo'lib, unda amal aniqlanadi.
Binar amal prototipi bitta argumentga ega va quyidagicha ko’rinishda bo’ladi:
tip operator@(parametr);
Parametrlarni biz uchun qulay bo'lgan har qanday usulda o'tkazishga ruxsat beriladi: qiymat bo'yicha, mos yozuvlar yoki ko'rsatkich bo'yicha. Metod-amal, shuningdek, o'z sinfini o'z ichiga olgan obyektga qiymat, ko'rsatkich yoki havolani qaytarishi mumkin. Qaytish turi o'rniga voidni belgilashga ruxsat beriladi.
Sinfdan tashqari metod-amalni amalga oshirishda, sarlavhada sinfning prefiks nomini odatdagi tarzda ko'rsatish talab qilinadi:
tip sinf::operator@() // unar amal
tip sinf::operator@(parametr) // binary amal
Obyekt uchun unar amal chaqiruvi quyidagi shaklga ega
@obyekt
obyekt@
qanday operatsiya qo'llanilishiga qarab - prefiks yoki postfiks. Prefiks operatsiyasi uchun funksiya chaqiruvi quyidagi shaklga ega
obyekt.operator@()
Murojaatning funksional shaklida postfiks amali uchun siz fiksirlangan argumentni ko'rsatishingiz kerak:
obyekt.operator@(0)
Sinf usuli sifatida belgilangan ikkilik operatsiyani chaqirishning funksional shakli quyidagicha ko'rinishda bo’ladi:
obyekt.operator@(argument)
Infix shakli
obyekt@argument
funktsional so'zining qisqartmasi.
Ta’minlash amallari binar amallardir, shuning uchun ular bitta argumentni olishlari kerak. Agar ta’minlash operatori = aniq amalga oshirilmagan bo'lsa, u avtomatik ravishda jimlik bo'yicha yaratiladi. Har qanday sinf uchun avtomatik ravishda yaratilgan ta’minlash amali prototipiga ega
sinf& operator = (const class &r)
O'z sinfingizga tegishli bo'lmagan parametr va qaytarish natijasi bilan ta’minlash amalini amalga oshirishga ruxsat beriladi; parametrni har qanday usulda o'tkazishga ruxsat beriladi; Siz havolani emas, balki qiymat yoki ko'rsatkichni qaytarishingiz mumkin - barchasi masalaning ehtiyojlariga bog'liq.
Boshqa ta’minlash amallari avtomatik ravishda yaratilmaydi. Ta’minlash funktsiyalari odatda joriy obyektga havolani qaytarishi kerak. const bo'lmagan havolani qaytaradigan har qanday metod qayta ishlatilishi mumkin.
Money& Money:: operator += (const Money & b)
Qayta foydalanish, masalan, doimiy havolani qaytarish orqali aniq taqiqlanishi mumkin
const Money & Money :: operator + = (const; Money & b)
const modifikatori natijani keyingi o'zgartirishga ruxsat bermaydi.
Do'stlaringiz bilan baham: |