Sinflar orasida munosabatlar (dasturlash)
Download 26.04 Kb.
|
New Microsoft Word Document
- Bu sahifa navigatsiya:
- Do’stona (friend) sinflar
- Inline funksiyalar C++ tilida inline funksiyalar ishlatish imkoniyati mavjud. Ko’pincha inline
- Sinf ichidagi inline funksiyalar
- Sinfning statik ma’lumotlari
- ClassName::static_member
- Statik metodlardan foydalanish
- :: operatoridan foydalanish
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 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< } 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
ma'muriyatiga murojaat qiling