Sinfdagi massivlarni initsializatsiyalash
Bir massivli sinfni a'zo o'zgaruvchi sifatida ko'rib chiqaylik:
class Values
{
private:
const int m_array[7];
};
C++11dan oldin, biz faqat initsializatsiyalash ro'yxati orqali qatorni nol qila olamiz:
class Values
{private:
const int m_array[7];
public:
Values(): m_array {} // massivga nolni joylashtirish
{// Agar biz massiv qiymatlarga ega bo'lishini xohlasak, bu yerda ta’minlashdan foydalanishimiz kerak }};
Biroq, C++ 11 da siz bir xil initsializatsiya yordamida massivni to'liq initsializatsiylashingiz mumkin:
class Values{
private:
const int m_array[7];
public:
Values(): m_array { 3, 4, 5, 6, 7, 8, 9 } // massivni initsializatsiyalash uchun uniform-initsializatsiyadan foydalanish
{ } };
66. Sinflar tarkibidagi a'zo o'zgaruvchilarni initsializatsiyalash
Sinflar tarkibidagi a'zo o'zgaruvchilarni initsializatsiyalash A'zolarni initsializatsiyalash ro'yxati, shuningdek, sinf a'zolarini initsializatsiyalash uchun ham ishlatilishi mumkin:
#include
class A { public:
A(int a)
{ std::cout << "A " << a << "\n"; } };
class B
{ private: A m_a; public: B(int b) : m_a(b-1) // konstruktor A (int) m_a a'zosini initsializatsiyalash uchun chaqiriladi
{ std::cout << "B " << b << "\n"; } };
int main() { B b(7); return 0; }
67. Sinflarni initsializatsiyalashda initsializatsiyalash ro'yxatlaridafoydalanish Agar initsializatsiyalash ro'yxati konstruktor nomi bilan bir qatorga to'g'ri kelsa, hamma narsani bitta qatorga qo'yish yaxshidir:
class Values { private: int m_value1; double m_value2; char m_value3;
public:
Values() : m_value1(3), m_value2(4.5), m_value3('d') // всё находится в одной строке { } };
Agar a'zolarni initsializatsiyalash ro'yxati konstruktor nomi yozilgan qatorga to'g'ri kelmasa, keyingi satrda (defis yordamida) boshlang'ichlarni kiritish kerak: class Values { private: int m_value1; double m_value2; char m_value3; public: Values(int value1, double value2, char value3='d') bu satrda juda ko'p narsalar bor, : m_value1(value1), m_value2(value2), m_value3(value3) // shuning uchun biz initsializatorlarni yangi qatorga joylashtiramiz (hoshiyani ishlatishni unutmang) { } }; Agar barcha initsializatorlar bitta qatorga to'g'ri kelmasa, siz har bir initsializator uchun alohida qator ajratishingiz mumkin: class Values { private: int m_value1; double m_value2; char m_value3; float m_value4; public:
Values(int value1, double value2, char value3='d', float value4=17.5) // на этой строке уже и так много чего, : m_value1(value1), // поэтому выделяем каждому инициализатору отдельную строку, не забывая о запятой в конце m_value2(value2), m_value3(value3), m_value4(value4) { } }; 68. Sinfning statik o’zgaruvchi-a’zolari
Do'stlaringiz bilan baham: |