c-png-clipart

C++: Ma’lumot turlari

C++ da ma’lumot turlari ikki kategoriyaga bo’linadi: fundamental va murakkab ma’lumot turlari.

Quyidagi ma’lumot turlari fundamental turlar hisoblanadi:

void. Bu tur tugallanmaydigan (ya’ni, bu tur bilan obyekt, massiv va adres (reference, ссылка) lar e’lon qilinmaydi va aniqlanmaydi) ma’lumot turi hisoblanib hech qanday qiymat qabul qilmaydi. Lekin bu tur bilan ko’rsatgichlar e’lon qilinishi va aniqlanishi mumkin. Bundan tashqari bu tur qiymat hosil qilmaydigan funksiyalarni e’lon qilish va aniqlashda foydalanilishi mumkin. Masalan, quyidagilar to’g’ri hisoblanadi:

void *Ptr;               // istalgan turdagi obyekt uchun ko’rsatgich
 
void DoSomething() { }   // funksiya

std::nullptr_t (C++ 11 dan boshlab). Bu tur nol ko’rsatgich nullptr ning turi hisoblanadi, ya’ni nullptr std::nullptr_t ma’lumot turiga ega. 0 yoki nullptr qiymatlarini qabul qiladi. Hajmi sizeof(void*) ga teng. Misol:

int *IntPtr = nullptr;   // IntPtr ning qiymati 0

bool. Mantiqiy ma’lumotlar, o’zgaruvchilar turi. Faqat true va false qiymatlarini qabul qiladi. Hajmi kompillyatorga bo’g’liq, lekin kamida 1 bayt. Misol:

bool BoolningHajmiBirgaTeng = sizeof(bool) == 1;

char, signed char, unsigned char. Bular belgilar turlari bo’lib, uchchalasi alohida turlar hisoblanadi. Uchchalasi bir xil hajmga ega va 1 baytga teng. char asosan belgilar to’plami, satrlar hosil qilishda foydalaniladi. U kompillyatorga bog’liq ravishda signed char yoki unsigned char bilan aynan bir xil bo’ladi. Shuning uchun -128 dan 127 gacha yoki 0 dan 255 gacha bo’lgan qiymatlarni qabul qiladi. signed char kichik hajmli, ishorali butun sonlar talab qilinganda foydalanilishi mumkin va -128 dan 127 gacha bo’lgan qiymatlarni qabul qiladi. unsigned char kichik hajmli, ishorasiz butun sonlar talab qilinganda foydalanilishi mumkin va 0 dan 255 gacha bo’lgan qiymatlarni qabul qiladi. Misol:

char Harf = ‘A’;
 
char DT[] = “C++;
 
const signed char N = -90;
 
unsigned char IP[4] = {192, 168, 1, 1};

char16_t (C++ 11 dan boshlab). Unicode formatidagi belgilar uchun ishlatiladi. Qiymatlari uchun UTF-16 belgilar to’plami foydalaniladi. Hajmi kompillyatorga bog’liq, lekin kamida 2 bayt. Misol:

char16_t Harf = u‘A’;
 
char16_t DT[] = u“C++;

char32_t (C++ 11 dan boshlab). Unicode formatidagi belgilar uchun ishlatiladi va UTF-32 belgilar to’plami foydalaniladi. Hajmi kompillyatorga bog’liq, lekin kamida 4 bayt. Misol:

char32_t Harf = U‘A’;
 
char32_t DT[] = U“C++;

wchar_t. Unicode formatidagi belgilar uchun ishlatiladi va UTF-16 yoki UTF-32 belgilar to’plami foydalaniladi. Hajmi kompillyatorga, ya’ni foydalanilgan belgilar to’plamiga bo’g’liq. Misol:

wchar_t Harf = L‘A’;
 
wchar_t DT[] = L“C++;

int. Butun sonlarning asosiy (базовый) turi hisoblanadi. Uning hajmi kamida 2 baytga teng. Lekin 32/64 bit arxitekturali tizimlarda uning hajmi kamida 4 bayt. Bu tur o’zgartirgich (модификатор) lar bilan birga ishlatilishi mumkin. Quyidagi o’zgartirgichlar mavjud: signed, unsigned (ishorasini belgilaydi) va short, long, long long (hajmini belgilaydi). Demak,

  • short, short int, signed short, signed short int lar aynan bir xil bo’lib, ishorali butun sonlar turi hisoblanadi. Hajmi kamida 2 bayt va -32768 dan 32767 gacha bo’lgan sonlarni qabul qiladi.
  • unsigned short, unsigned short int lar aynan bir xil bo’lib, ishorasiz butun sonlar turi hisoblanadi. Hajmi kamida 2 bayt va 0 dan 65535 gacha bo’lgan sonlarni qabul qiladi.
  • signed, signed int, int lar aynan bir xil bo’lib, ishorali butun sonlar turi hisoblanadi. Hajmi kamida 4 bayt va -2147483648 dan 2147483647 gacha bo’lgan sonlarni qabul qiladi. Ba’zi 16 bitli tizimlarda uning hajmi 2 bayt (short variantidek).
  • unsigned, unsigned int lar aynan bir xil bo’lib, ishorasiz butun sonlar turi hisoblanadi. Hajmi kamida 4 bayt va 0 dan 4294967295 gacha bo’lgan sonlarni qabul qiladi. Ba’zi 16 bitli tizimlarda uning hajmi 2 bayt (short variantidek).
  • long, long int, signed long , signed long int lar aynan bir xil bo’lib, ishorali butun sonlar turi hisoblanadi. Hajmi kamida 4 bayt va -2147483648 dan 2147483647 gacha bo’lgan sonlarni qabul qiladi. Ba’zi 64 bitli tizimlarda uning hajmi kamida 8 bayt va -9223372036854775808 dan 9223372036854775807 gacha bo’lgan sonlarni qabul qiladi.
  • unsigned long, unsigned long int lar aynan bir xil bo’lib, ishorasiz butun sonlar turi hisoblanadi. Hajmi kamida 4 bayt va 0 dan 4294967295 gacha bo’lgan sonlarni qabul qiladi. Ba’zi 64 bitli tizimlarda buning hajmi kamida 8 bayt va 0 dan 18446744073709551615 gacha bo’lgan sonlarni qabul qiladi.
  • long long, long long int, signed long long, signed long long int lar aynan bir xil bo’lib, ishorali butun sonlar turi hisoblanadi. Hajmi kamida 8 bayt va -9223372036854775808 dan 9223372036854775807 gacha bo’lgan sonlarni qabul qiladi.
  • unsigned long long, unsigned long long int lar aynan bir xil bo’lib, ishorasiz butun sonlar turi hisoblanadi. Hajmi kamida 8 bayt va 0 dan 18446744073709551615 gacha bo’lgan sonlarni qabul qiladi.

float. Yagona aniqlikga ega bo’lgan haqiqiy sonlar turi hisoblanadi. Bunday aniqlikga ega sonlar odatda 4 bayt hajmga ega va 1.17E-38 dan 3.4E38 gacha bo’lgan sonlarni qabul qiladi.

double. float ga nisbatan ikki karra yuqori aniqlikga ega bo’lgan haqiqiy sonlar turi va odatda 8 bayt hajmga ega. 2.23E-308 dan 1.79E308 gacha bo’lgan sonlarni qabul qiladi.

long double. Kengaytirilgan aniqlikga ega bo’lgan haqiqiy sonlar turi va odatda 10 yoki 16 bayt (kompillyatorga bog’liq) hajmga ega. 3.36E-4932 dan 1.18E4932 gacha bo’lgan sonlarni qabul qiladi.

Quyidagilar murakkab turlar hisoblanadi:

Massiv. Misol:

int Massiv1[10];
 
double Massiv2[10];

Funksiyalar. Funksiyalarning e’lon qilinishi ularning nomi va turini ko’rsatib beradi. Funksiyalarning aniqlanishi esa ularning nomi, turi va “tanasi” ni ko’rsatib beradi. Misol:

void Funksiya1(int);        // funksiya e’lon qilinyapti
 
int Funksiya2() { //... }   // funksiya aniqlanyapti

void, obyekt yoki funksiyalar uchun ko’rsatgichlar (sinflarning statik a’zolari uchun ham). Misol:

void *Ptr;          // istalgan turdagi obyekt uchun ko’rsatgich
 
int *IntPtr;        // butun son uchun ko’rsatgich
 
int (*FuncPtr)();   // funksiya uchun ko’rsatgich

Obyekt yoki funksiyalar uchun adreslar (reference, ссылка). Ikki turdagi adreslar mavjud: l-ifoda adreslari va r-ifoda adreslari. r-ifoda adres tushunchasi C++ 11 dan boshlab kiritilgan. Misol:

int Butun;
 
int &AButun = Butun;              // bu yerda AButun l-ifoda adres
 
int Funksiya1(X &&v);             // bu yerda v r-ifoda adres, X biror sinf
 
int Funksiya2() { //... }
 
int (&AFunksiya2)() = Funksiya2;  // bu yerda AFunksiya2 l-ifoda adres

Sinf (struct, class)

Uyushma (union)

Sanoq (enumeration)

Sinflarning statik bo’lmagan a’zolari uchun ko’rsatgichlar. Misol:

struct X  {  int IntMem;  };
 
int X::*IntMemPtr = &X::IntMem;  // bu yerda IntMemPtr – ko’rsatgich
 
X x;                             // x obyektini yaratamiz
 
x.*IntMemPtr = 100;              // x ning IntMem a’zosini o’zgartiramiz

Yuqoridagi standart turlardan tashqari, kompillyatorlar qo’shimcha turlarga ega bo’lishlari ham mumkin. Masalan, ko’p kompillyatorlar __int8, __int16, __int32, __int64 (ishorali va ishorasiz) butun sonlar turlariga ega.

(430 marta o'qilgan, bugun 1 marta o'qildi)

O'xshash maqolalar: