1.1. Operatorlarni qayta yuklash
C# tilida o‘rnatilgan operatorlarni qayta yuklash imkoniyati mavjud.Operatorlar global ravishda yoki sinf chegarasida qayta yukla–nishi mumkin. Qayta yuklangan operatorlar operator kalit so‘zi yordamida funksiya ko‘rinishida amalga oshiriladi. Qayta yuklanuvchi funksiya operator funksiya nomlanadi va nomi operatorX ko‘rinishida bo‘lishi kerak, bu yerda X - qayta yuklanuvchi operator. C# tilida qayta yuklanishi mumkin bo‘lgan operatorlar ro‘yxati jadvalida keltirilgan. Masalan, qo‘shish operatorini qayta yuklash uchun operator+ nomli funksiyani aniqlash kerak bo‘ladi. Agar qo‘shish qiymat berish amali bilan kelgan holini qayta yuklash uchun operator+= ko‘rinishida funksiya aniqlash zarur bo‘ladi. Odatda kompilyator programma kodida qayta yuklangan operatorlar uchraganda ularni oshkormas ravishda qo‘llaydi.
Zarur bo‘lganda ularni oshkor chaqirish mumkin:
Nuqta nuqta1, nuqta2, nuqta3;
// Qayta yuklangan qo‘shish operatorini oshkor
chaqirish
nuqta3=nuqta1.operator+(nuqta2);
nuqta3=nuqta1.operator+(nuqta2);
Jadvalda keltirilgan operatorlar qayta yuklanmaydigan operatorlar hisoblanadi.
Jadval. Qayta yuklanmaydigan operatorlar
Qayta yuklanadigan operatorlarning operator funksiyalari, new va delete operatorlaridan tashqari, quyidagi qoidalarga bo‘ysunishi kerak:
1) operator funksiya sinfning statik bo‘lmagan funksiya–a’zosi bo‘lishi kerak yoki operator funksiya sinf yoki sanab o‘tiladigan turdagi argument qabul qilishi kerak yoki operator funksiya sinf yoki sanab o‘tiladigan turga ko‘rsatkich yoki murojaat bo‘lgan argumentlarni qabul qilishi kerak.
Masalan,
class Nuqta
{
public:
//«kichik» operatori uchun operator funksiya-a’zoni
// e’lon qilish
Nuqta operator<(Nuqta&);
…
// Qo‘shish operatorlarini e’lon qilish
friend Nuqta operator+(Nuqta&,int);
friend Nuqta operator+(int,Nuqta&);
};
Bu misolda «kichik» operatori sinfning funksiya-a’zosi sifatida e’lon qilingan, qo‘shish operatori esa sinfning do‘sti sifatida e’lon qilingan va u bitta operatorni qayta yuklashning bir nechta varianti bo‘lishi mumkinligini ko‘rsatadi;
2) operator funksiya operatorning argumentlar (operandlar) sonini, ularning ustunligi va bajarilish tartibini o‘zgartira olmaydi;
3) sinf funksiya a’zosi sifatida e’lon qilingan unar operatorning operator funksiyasi parametrga ega bo‘lmasligi kerak. Agar operator funksiya global funksiya bo‘lsa, u faqat bitta parametrga ega bo‘ladi;
4) sinf funksiya a’zosi sifatida e’lon qilingan binar operatorning operator funksiyasi bitta parametrga ega bo‘lishi kerak. Agar operator funksiya global funksiya bo‘lsa, u faqat ikkita parametrga ega bo‘ladi;
5) operator funksiya kelishuv bo‘yicha parametrlarga ega bo‘lmasligi kerak;
6) sinf funksiya a’zosi sifatida e’lon qilingan operator funksiyaning birinchi parametri (agar u bo‘lsa) sinf turida bo‘lishi kerak. Chunki aynan shu sinf obyekti uchun mazkur operator chaqiriladi. Birinchi argument ustida hech qanday turga keltirish amali bajaril-masligi kerak;
7) qiymat berish operatorining operator funksiyasidan tashqari barcha operator funksiyalar vorislik bilan o‘tadi;
8)’=’, “( )”, “[ ]” va ”->” operatorlarning operator funksiyalari sinfning statik bo‘lmagan funksiya a’zolari bo‘lishi kerak (va ular global funksiya bo‘la olmaydi). Operatorlarni qayta yuklash orqali, sinf chegarasida operator-ning mohiyatini tubdan o‘zgartirib yuborish mumkin. Lekin bu ishni zarurat bo‘lgandagina amalga oshirgan ma’qul. Aks holda bajariladigan amallarda mazmuniy xatolar yuzaga kelishi mumkin.
Do'stlaringiz bilan baham: |