Obyekt
C++ standartiga ko’ra, obyekt bu xotiraning biror bir qismi yoki sohasidir (funksiya ob’yekt emas u hatto xotiraning biror qismini egallasada). Obyekt u aniqlanganda, new operatori yordamida va kompillyator tomonidan yaratilishi mumkin (masalan, this, __func__ o’zgaruvchilari kompillyator tomonidan yaratiladi). Obyekt nomga ega bo’lishi mumkin. Obyekt ma’lumot turiga ega, masalan, int, double, string va h. Obyektxotira davriga ega va bu davr ob’yektning mavjudlik davrini belgilaydi. Obyekt polimorf bo’lishi mumkin, ya’ni, u bir yoki undan ortiq virtual funksiyalarga ega bo’lishi mumkin (keyingi darslarda to’liqroq yoritiladi).
Obyekt o’z tarkibiga boshqa ob’yektlarni olishi mumkin. Obyekt tarkibidagi obyektlar subobyektlar deyiladi. Subobyekt sinf a’zosi, “ona” obyekt (vorislik) yoki massiv elementi sifatida bo’lishi mumkin. Ikkita obyekt bir xil adresga ega bo’lishi mumkin agar biri ikkinchisining tarkibida bo’lsa.
Standartga ko’ra, barchasi obyekt deyilsada, obyekt so’zi odatda murakkab yoki tarkibiy qismga ega bo’lgan obyektlarga, masalan sinf nusxalariga nisbatan ishlatiladi. Skalyar turdagi, masalan int, double, char obyektlarini odatda o’zgaruvchilar deyiladi.
Soha
Har bir nom dastur matnining biror sohasida (global soha, namespacesohasi, blok yoki lokal soha, funksiya sohasi, funksiya prototipi sohasi, sinf sohasi, enumeration sohasi, shablon parametri sohasi) e’lon qilinadi. Bu soha dastur matnining shu nom foydalanilishi mumkin bo’lgan eng katta qismi hisoblanadi va bu sohada shu nom sohani aniqlash operatori:: siz foydalanilishi mumkin. Bu soha nomning e’lon qilingan sohasideyiladi. Lekin nom, e’lon qilingan sohaning amal qilish sohasi deb ataluvchi sohasidagina mavjud. Bu soha esa nom e’lon qilingan nuqtadanboshlanadi. Lekin nomning amal qilish sohasi har doim ham uzluksiz bo’lmasligi mumkin.
// misol2.cpp
int j = 1;
int main()
{
int i, j;
j = 2;
::j = 3;
}
Ushbu misolda birinchi ‘j’ ning e’lon qilingan sohasi misol2.cpp faylining to’liq matni, ya’ni global soha hisoblanadi. Amal qilish sohasi esa int j dan keyin boshlanadi va misol2.cpp fayli matnining oxirigacha davom etadi. Lekin bu soha main funksiya “tanasi” da, vergul dan } belgigacha bo’lgan sohani o’z ichiga olmaydi. Chunki verguldan so’ng xuddi shu nom bilan boshqa o’zgaruvchi e’lon qilingan.
Ikkinchi ‘j’ ning e’lon qilingan sohasi funksiyaning “tanasi”, ya’ni { } belgilar orasidagi soha hisoblanadi, ya’ni funksiya sohasi. Uning amal qilish sohasi nuqta-verguldan oldin boshlanadi va } belgida tugaydi. Ikkinchi ‘j’ ning amal qilish sohasida birinchi ‘j’ “yashiriladi” va u :: operatori orqali foydalaniladi.
int x = 12;
{ int x = x; } // lokal x o’zining shaxsiy (noma’lum) qiymatiga teng
const int i = 10;
{ int i[i]; } // lokal i 10 elementli massiv
const int Oq = 5;
{ enum { Oq = Oq + 1, Qora = Oq + 1 }; } // Oq 6 va Qora 7 ga teng
enum elementlarining e’lon qilingan sohasi enum e’lon qilingan soha hisoblanadi.
Xotira davri
Har bir obyekt xotira davriga ega. Bu obyektning xususiyati bo’lib, dastur xotirasining shu obyekt egallagan qismi, sohasining davrini belgilaydi. Obyekt bir vaqtning o’zida faqat bitta xotira davriga ega bo’lishi mumkin. Obyektning xotira davri obyekt qanday yaratilishiga asosan aniqlanadi va quyidagilardan biri bo’lishi mumkin:
Do'stlaringiz bilan baham: |