Sinflar orasida munosabatlar (dasturlash)


Download 26.04 Kb.
Sana07.02.2023
Hajmi26.04 Kb.
#1173144
Bog'liq
New Microsoft Word Document



SINFLAR ORASIDA MUNOSABATLAR (DASTURLASH)
Reja:
1. Munosabat turlari, do’stona (friend) funksiyalar
2. Do’stona (friend) sinflar
3. Sinfning statik ma’lumotlari
4. Obyektlar massivi va undan foydalanish




Friend funksiyalar
Class’ning private va protected qismiga class’ga tegishli bo’lmagan friend funksiya murojat qilishi mumkin. Friend funksiyalar klasning ichida friend kalit so’zi bilan yoziladi.
E’lon qilinishi:
class myclass {
…..
friend int sum(myclass x);
….
};
Albatta friend funksiyalar sinfdan tashqarida mavjud bo’ladi va ushbu do’stona funksiya sinfning barcha sohalariga murojaat qila olishi mumkin.

class sm{


int a, b;
public:
friend int sum(myclass x);
void set_ab(int i, int j) { a = I; b = j; }
};
int sum(myclass x) {
return x.a + x.b; //sum() hech qaysi classga tegishli emas.
}
int main() {
myclass n;
n.set_ab(3, 4);
cout << sum(n);
return 0;
}
Do’stona (friend) sinflar
Bir class boshqa bir class’ga do’stona bo’lishi mumkin. Bunda sinflar bir – birining a’zolaridan foydalanish imkoniyatiga ega bo’ladi. Bunda shu narsaga e’tibor berish lozimki, biror sinfga do’stona bo’ladigan sinf (ya’ni friend kalit so’zi orqali e’lon qilinadigan sinf), mazkur sinfning a’zolaridan foydalanish imkoniyatini yaratadi.


E’lon qilinishi:
class myclass {
…..
friend someclass b;
….
};
Do’stona sinfdan foydalanish uchun quyida misol keltirilgan. Bunda e’tibor berishimiz lozimki, TwoValues sinfi Min sinfiga do’stona bo’lib, bunda Min sinfi TwoValues sinfining a’zolaridan foydalanishi mumkin.

class TwoValues {


int a, b;
public:
TwoValues(int i, int j) { a = i; b = j; }
friend class Min;
};
class Min {
public:
int min(TwoValues x) { return x.a < x.b ? x.a : x.b; }
};
int main() {
TwoValues ob(10, 20);
Min m;
cout << m.min(ob);
return 0;
}
Inline funksiyalar
C++ tilida inline funksiyalar ishlatish imkoniyati mavjud. Ko’pincha inline funksiyalar class’lar bilan ishlatiladi. C++ da qisqa funksiyalarni ishlatganda ular chaqirilmaydi aks holda ularning kodi chaqirilgan joyga qo’yiladi. Bu jarayon macro-funksiyalarni ishlatishga o’xshaydi.
Funksiyani chaqirmaslik uchun inline kalit so’zi ishlatiladi. Quyidagi misolda inline funksiyadan foydalanish ko’rsatilgan.
inline int max(int a, int b) {
return a>b ? a : b;
}
int main() {
cout << max(10, 20);
cout << " " << max(99, 88);
return 0;
}
Kompilyatsiyadan chiqqandan keyin:
int main() {
cout << (10>20 ? 10 : 20);
cout << " " << (99>88 ? 99 : 88);
return 0;
}
Sinf ichidagi inline funksiyalar

  1. Metodni e’lon qilganda metod tanasini yozish.

class Human {


public:
void lookAt(const char* name) {
std::cout << name << std::endl;
}
private:
char _name[30];
};
2. Class’dan tashqarida inline
inline void Human::lookAt(const char* name) {
std::cout << name << std::endl;
}


Sinfning statik ma’lumotlari
Class o’zgaruvchisini static deb e’lon qilinganda kompilyator uni obyektlar uchun bitta nusxa ko’rinishida yaratadi. Ya’ni bir nechta obyekt bitta o’zgaruvchidan foydalanadi. Static o’zgaruvchi 0 ga inisalizatsiya qilinadi. Class static a’zolariga murojat qilish ClassName::static_member ko’rinishida murojat qilinadi, obyekt orqali ham murojat qilsa bo’ladi.
Static o’zgaruvchini static kalit so’zi bilan e’lon qilinadi.
E’lon qilish:
class someclass {
public:
static int ob;
};
Static maydonlardan foydalanish
class Proper {
public:
static int ob_counter;
};
int Proper::ob_counter;
int main() {
Proper a;
cout<
cout<return 0;
}
Static metodlar
Class metodlarini static o’zgaruvchilar kabi e’lon qilsa bo’ladi. Static metodlar static a’zolarga murojat qiladi.
E’lon qilish:
class someclass {
public:
static int ob;
static int get_ob() { return ob; }
};
Statik metodlardan foydalanish
class Proper {
public:
static int ob_counter;
static int get_ob() { return ob_counter; }
};
int Proper::ob_counter;
int main() {
cout<
cout<
return 0;
}
:: operatoridan foydalanish
Biz bilamizki :: operatori class a’zolariga murojat qilish uchun ishlatiladi. Quyidagi holat berilgan:
int i;
void f() {
int i;
i = 10;
}
int main() {
f();
cout<return 0;
}

:: operatori orqali global o’zgaruvchiga murojat qilish quyidagicha amalga oshiriladi.
int i;
void f() {
int i;
::i = 10;
}
int main() {
f();
cout<return 0;
}

Download 26.04 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling