2.1. Metodlarni qayta yuklash
Unar operatorlar uchun faqat bitta operand kerak bo‘ladi. Unar operatorni sinfning
funksiya–a’zosi ko‘rinishida qayta yuklashda bu yagona operand bu amalni chaqirgan
obyektning o‘zi hisoblanadi. Shu sababli, unar operatorning operator funksiyasi statik
bo‘lmagan funksiya-a’zo sifatida e’lon qilinadi va u quyidagi ko‘rinishga ega bo‘ladi:
operatorX();
bu yerda funksiya qaytaradigan qiymat turi, X- qayta
yuklanayotgan unar operator.
Agar operator funksiya global ravishda e’lon qilinganda, u quyidagi sintaksisga
javob berishi kerak:
operatorX(
);
bu yerda
– parametr turi va
– funksiya parametri.
Plus va minus unar operatorlarni qayta yuklashga misol
ko‘raylik.
class Nuqta
{
int x,y;
public:
Nuqta(int _x,int _y){x=_x; y=_y;}
Nuqta(){x=0; y=0;}
Qiymat_xy(int & _x,int & _y){_x=x; _y=y;}
Nuqta operator+();
Nuqta operator-();
};
Nuqta & Nuqta::operator+()
{
x=+x;
y=+y;
return *this;
}
Nuqta & Nuqta::operator+()
{
x=-x;
y=-y;
return *this; 196
}
void main()
{
int a,b;
Nuqta n1(-10,20);
n1=+n1; //qayta yuklangan plyus operatorini chaqirish
n1.Qiymat_xy(a,b);
Console.Write("n1.x=”<
n1=-n1; //qayta yuklangan minus operatorini chaqirish
n1.Qiymat_xy(a,b);
Console.Write("n1.x=”<
}
Programma ishlashi natijasida ekranda
n1.x=-10 n1.y=20
n1.x=10 n1.y=-20
satrlari paydo bo‘ladi.
Xuddi shu natijalarga global operator funksiyalarni sinfning do‘st funksiyalari
ko‘rinishida e’lon qilish orqali erishish mumkin:
friend Nuqta operator+(Nuqta & ob);
friend Nuqta operator-(Nuqta & ob);
Bu funksiyalar aniqlanishi
friend Nuqta operator+(Nuqta & ob)
{
ob.x=+ob.x;
ob.y=+ob.y;
return ob;
}
friend Nuqta operator-(Nuqta & ob)
{
ob.x=-ob.x;
ob.y=-ob.y;
return ob;
}
Ushbu funksiyalarni chaqirish natijalari yuqoridagi funksiyalar bilan bir xil
bo‘ladi. Inkrement va dekrement operatorlari, ularning prefiks va postfiks ko‘rinishlari bo‘lishi hisobiga qayta yuklash nuqtai-nazaridan alohida kategoriyaga tushadi. Prefiks va postfiks ko‘rinish-larni farqlash uchun quyidagi qoidalarga amal qilinadi: prefiks ko‘rinishni qayta yuklash, odatdagi unar operatorni qayta yuklash bilan bir xil; postfiks ko‘rinish uchun operator funksiya qo‘shimcha int turidagi parametrga ega bo‘ladi. Amalda bu parametr ishlatilmaydi va funksiyani chaqirishda uning qiymati 0 bo‘ladi (zarurat bo‘lganda ishlatilishi mumkin). Bu parametrning vazifasi - kompilyatorga operatorning postfiks ko‘rinishi ishlatilayotganligini bildirishdir. Quyidagi misolda Nuqta sinfi uchun inkrement va dekrement operator-larini qayta yuklash ko‘rsatilgan:
class Nuqta
{
int x,y;
public:
Nuqta(int _x,int _y){x=_x; y=_y;}
Nuqta(){x=0; y=0;}
Qiymat_xy(int & _x,int & _y){_x=x; _y=y;}
Nuqta & operator++(); // prefiks inkrement uchun
Nuqta operator++(int); // postfiks inkrement uchun
Nuqta & operator––(); // prefiks dekrement uchun
Nuqta operator––(int); // postfiks dekrement uchun
};
Nuqta & Nuqta::operator++()
{
x++;
y++;
return *this;
}
Nuqta Nuqta::operator++(int)
{
Nuqta Oraliq=*this;
++*this;
return Oraliq;
}
Nuqta & Nuqta::operator--()
{
x--;
y--;
return *this;
}
Nuqta Nuqta::operator--(int)
{
Nuqta Oraliq=*this; 198
--*this;
return Oraliq;
}
void main()
{
int a,b;
Nuqta n1(-10,20);n2(15,25),n3;
++n1; //prefiks inkrement operatorini chaqirish
n1.Qiymat_xy(a,b);
Console.Write("(++n1).x=”<
n1++; //postfiks inkrement operatorini chaqirish
n1.Qiymat_xy(a,b);
Console.Write("(n1++).x=”<
n3=--n2; //prefiks dekrement operatorini chaqirish
n3.Qiymat_xy(a,b);
Console.Write("n3=--n2; => n3.x="<
n1.Qiymat_xy(a,b);
Console.Write("n1.x="<
n1++; //postfiks inkrement operatorini chaqirish
n1.Qiymat_xy(a,b);
Console.Write("(n1++).x=”<
n3=--n2; //prefiks dekrement operatorini chaqirish
n3.Qiymat_xy(a,b);
Console.Write("n3=--n2; => n3.x="<
n1.Qiymat_xy(a,b);
Console.Write("n1.x="<Download 213,04 Kb. Do'stlaringiz bilan baham: |