3.5.Nusxava statik a’zolar Key Point. Statik o`zgaruvchi barcha sinf ob’yektlari uchun umumiy hisoblanadi. Statik funksiya sinfning nusxa a’zolariga murojaat eta olmaydi. Sinflarda qo`llaniluvchi ma’lumotlar maydoni nusxa yoki o`zgaruvchi nusxa ma’lumotlar maydoni sifatida ma’lum. O`zgaruvchi nusxa sinfning aniq nusxasi bilan bog`langan; ubitta sinf ob’yektlari o`rtasida taqsimlanmaydi. Masalan, faraz qilaylik, 2.7-kodli ro`yxatda, CircleWithPrivateDataFields.h da berilgan Circle sinfidan foydalanib, quyidagi ob’yektlarni yaratdik:
Circle circle1;
Circle circle2(5);
Bu yerda, circle1 dagi radius circle2dagi radiusga bog`liq emas va xotirada boshqa joyda saqlanadi. circle1 radiusini o`zgartirish circle2 dagi radiusga ta’sir o`tkazmaydi, va aksincha.
Agar biz sinfning barcha nusxalari ma’lumotlardan birgalikda foydalanishlarini istasak, statik o`zgaruvchilardan (shuningdek, ular sinf o`zgaruvchilari deb ham ataladi) foydalanishimiz kerak bo`ladi. Statik o`zgaruvchilar qiymatini umumiy xotira katakchasida saqlaydi. Shuning uchun ham, agar bir sinfga ta’lluqli bitta ob’yekt statik o`zgaruvchi qiymatini o`zgartirsa, bu sinfning barcha ob’yektlariga ta’sir qiladi. C++ statik funksiyalar va statik o`zgaruvchilarni qo`llaydi. Statik funksiyalarni sinf nusxasini hosil qilmasdan turib chaqirish mumkin. Nusxa funksiyalari faqat aniqlangan nusxadan chaqirilishi mumkin ekanligini yodga olamiz.
Keling, yaratilgan doira ob’yektlari sonini hisoblash uchun, Circle sinfiga numberOfObjects o`zgaruvchisini qo`shish orqali o`zgartirish kiritamiz. Bu sinfning birinchi ob’yekti yaratilganida, numberOfObjects ning qiymati 1 ga teng bo`ladi. Ikkinchi ob’yekt yaratilganida esa, numberOfObjects ning qiymati 2 ga teng bo`ladi. Yangi doira sinfi UMLi 3.10-rasmda ko`rsatilgan. Circle sinfi radius o`zgaruvchi nusxani, numberOfObjects statik o`zgaruvchini, getRadius, setRadiusvagetArea nomlaridagi nusxa funksiyalarini va getNumberOfObjects nomli statik funksiyani aniqlaydi.
3.10-rasm. Nusxaga ta’alluqli bo`lgan nusxa elementlari bir-biridan mustaqil bo`lgan xotiraga ega. Statik o`zgaruvchilar bir sinfdagi barcha nusxalar uchun yagona sanaladi. Statik o`zgaruvchi yoki statik funksiyani e’lon qilish uchun, o`zgaruvchi yoki funksiya e’loni qismiga static sozlovchisini joylashtirish lozim. Bunday holatda numberOfObjects statik o`zgaruvchi va getNumberOfObjects() statik funksiyalar quyidagicha ko`rinishda e’lon qilinishi mumkin: