Vorislikdan va abstrakt sinfdan foydalanib nashr, kitob va o'quv qoilanma sinflarini yarating.
16.1.Standart amallarni qo‘shimcha yuklash C++ tilining ajoyib xususiyatlaridan biri standart amallarni yangi ma’lumotlar turlariga qoilash imkoniyatidir. Masalan, satrlarni ulashni SI + S2 ko’rinishda belgilash ancha qulay. Bu amalni simvolli massivlarga yoki satrli konstantalarga qoilashning iloji yo‘q. Lekin SI va S2 ni biror sinf obyektlari sifatida tavsiflansa. ular uchun ‘ + ’ amalini kiritish mumkin boladi. Amalni maiumotlarning yangi turiga qollash uchun dasturchi "operatsiya-funksiya" deb ataluvchi maxsus funksiyani kiritishi lozim. Operatsiya-funksiya ta’rifi quyidagicha: Qaytariluvchi_ma’lumot_turi operator operatsiya_belgisi (operatsiya_funksiya_parametrlari_spetsifikatsiyasi) {operatsiya_funksiya_tanasi_operatorlari} Kerak bolganda bu funksiya operator prototipini kiritish mumkin. Qaytariluvchi_maiumot_turi operator operatsiya_belgisi {operatsi>a_funksiya_parametrlari_spetsifikatsiyasi) Misol uchun * amalni biror T sinfga tegishli obyektlarga qollash uchun quyidagicha funksiya e’lon qilishi mumkin: T operator * (Tx,Ty) Bu usulda ta’riflangan operatsiya qo‘shimcha yuklangan (inglizchasi- ga-overload) deb ataladi. Agar T sinf uchun yuqorida keltirilgan turdagi funksiya e Ion qilingan boisa. A*B ifoda operator (A, B) sifatida qaraladi. Sinf obvektlariga funksiya-operatorni qollash uchun operatsiya-funksiya yoki sinf komponenta funksiyasi yoki dostona funksiya boiishi, yoki parametrlardan birortasi sinf turiga ega boiishi kerak. Amallar kengavtirilganda ular uchun har xil turlar kombinatsiyasini oldindan nazarda tutish lozim. Lekin operatsiya-funksiyalarga murojaat qi- linganda standart turlar almashinuvchi qoidalari ishlatiladi, shuning uchun turlarning hamma kombinatsiyalarini hisobga olish zarurati yo‘q. Ko‘pgina hollarda binar amallar uchun quyidagi hollarni hisobga olish yetarli.
standart tur, sinf
sinf, standart tur
sinf, sinf
Masalan: Complex sinfi uchun quyidagi dostona operatsiya-funk- siyalarni kiritish mumkin: complex operator + (Complex x, Complex y) { return (Complex(x.real+y.real, x.imag+y.imag()); } Complex operator + (double x, Complex y) { return (Complex(x+y. real, vimagQ); } Complex operator4-(Complex x, double y} { . return (Complex (x.real+y, x.imag ()); } Quyidagi dasturda ifodalar qo‘llanilgan: