Javoblar Dasturlash asoslari


C++da sinf tarkibidagi konstruktorlar



Download 132,23 Kb.
bet19/40
Sana06.07.2022
Hajmi132,23 Kb.
#743820
1   ...   15   16   17   18   19   20   21   22   ...   40
Bog'liq
Javoblar Dasturlash asoslari

54.C++da sinf tarkibidagi konstruktorlar
Konstruktorlar Agar sinfning (yoki strukturaning) barcha a'zolari ochiq bo'lsa, biz sinfni (yoki strukturani) to'g'ridan -to'g'ri boshlang'ich ro'yxati yoki bir xil initsializatsiya (C ++ 11 da) yordamida initsializatsiyalashimiz mumkin:
class Boo
{ public:
int m_a;
int m_b; };
int main()
{ Boo boo1 = { 7, 8 }; // initsializatorlar ro’yxati
Boo boo2 { 9, 10 }; // uniform-initsializatsiya (C++11)
return 0; }
Ammo, agar biz sinfning har qanday o'zgaruvchisini yopiq qilsak, biz ularni to'g'ridan-to'g'ri initsializatsiyalay olmaymiz. Bu yerda mantiqiy: agar siz o'zgaruvchiga to'g'ridan-to'g'ri kira olmasangiz (chunki u yopiq bo'lsa), uni to'g'ridan -to'g'ri ishga tushira olmaysiz. Yopiq a'zo o'zgaruvchilari bo'lgan sinfni qanday ishga tushirasiz? Konstruktorlardan foydalaning. Konstruktor - bu bir xil sinfdagi obyekt yaratilganda avtomatik ravishda chaqiriladigan sinf metodining maxsus turi. Konstruktorlar, odatda, standart / foydalanuvchi tomonidan berilgan qiymatlarga ega bo'lgan sinf a'zolarining o'zgaruvchilarini ishga tushirish yoki ishlatilayotgan sinf uchun zarur bo'lgan konfiguratsiya bosqichlarini bajarish uchun ishlatiladi (masalan, ma'lum bir fayl yoki ma'lumotlar bazasini ochish). Oddiy metodlardan farqli o'laroq, konstruktorlar ularni nomlashning ma'lum qoidalariga ega: - Konstruktorlar har doim sinf bilan bir xil nomga ega bo'lishi kerak (katta va kichik harflar hisobga olinadi); - Konstruktorlar qaytish turiga ega emas (hatto void emas). E'tibor bering, konstruktorlar faqat initsializatsiya uchun mo'ljallangan. Mavjud obyektni qayta tiklash uchun konstruktorni chaqirishga urinmaslik kerak. Bu xatosiz kompilyatsiya qilinishi mumkin bo'lsa -da, natijalar kutilmagan bo'lishi mumkin (kompilyator vaqtinchalik obyekt yaratadi va keyin uni o'chiradi).
55. C++da sinf tarkibidagi standart konstruktorlar
Standart konstruktorlar.Parametrlari bo'lmagan konstruktor (yoki jimlik bo‘yicha parametrlarga ega) standart konstruktor deb ataladi. Agar foydalanuvchi tomonidan initsializatsiyalash uchun hech qanday qiymat ko'rsatilmagan bo'lsa, chaqiriladi. Masalan:
#include
class Fraction
{
private:
int m_numerator;
int m_denominator;
public:
Fraction() // jimlik bo’yicha konstruktor
{
m_numerator = 0;
m_denominator = 1;
}
int getNumerator() { return m_numerator; }
int getDenominator() { return m_denominator; }
double getValue() { return static_cast(m_numerator) / m_denominator; }
};
int main()
{
Fraction drob; // argumentlar bo'lmaganligi sababli, standart Fraction () konstruktori chaqiriladi
cout << drob.getNumerator() << "/" << drob.getDenominator() << '\n';
return 0;}
Bu sinf alohida int qiymatlari sifatida haqiqiy sonlarni o'z ichiga oladi. Standart konstruktor Fraction deb nomlanadi (xuddi sinf kabi). Biz Fraction sinfining obyektini argumentlarsiz yaratganimiz uchun, standart konstruktor obyekt uchun xotira ajratilgandan so'ng darhol ishladi va obyektimizni ishga tushirdi.
Dasturni bajarish natijasi:0/1
E'tibor bering, bizning surat (m_numerator) va maxraj (m_denominator) standart konstruktorda biz o'rnatgan qiymatlar bilan boshlangan! Bu shunday foydali xususiyatki, deyarli har bir sinf o'z standart konstruktoriga ega. Busiz, biz surat va maxraj qiymatlari avtomatik olinardi (bu esa xotiraning behuda sarflanishidir), chunki biz ularga oddiy qiymatlarni aniq belgilab bermagunimizcha.
56. C++da sinf tarkibidagi parametrli konstruktorlar
Parametrli konstruktorlar. Standart konstruktor bizning sinflarimizni standart qiymatlarga o'tkazilishini ta'minlash uchun juda yaxshi bo'lsa-da, bizning sinfimiz misollari uchun ma'lum qiymatlarga ega bo'lish kerak bo'ladi, biz buni keyinroq beramiz. Yaxshiyamki, konstruktorlar parametrlar bilan ham e'lon qilinishi mumkin. Surat va maxrajni initsializatsiyalash uchun ishlatiladigan ikkita butun sonli konstruktor misoli:
#include class Fraction
@TBCLBOT LAZIZBEK KARIMOV
{ private: int m_numerator; int m_denominator; public: Fraction() { m_numerator = 0; m_denominator = 1; } // Ikki parametrli konstruktor, ulardan biri standart qiymatga ega Fraction(int numerator, int denominator=1) { assert(denominator != 0); m_numerator = numerator; m_denominator = denominator; } int getNumerator() { return m_numerator; } int getDenominator() { return m_denominator; } double getValue() { return static_cast(m_numerator) / m_denominator; } };
E'tibor bering, bizda hozirda ikkita konstruktor bor: agar biz qiymat bermasak chaqiriladigan standart konstruktor va agar biz qiymatlarni taqdim qilsak chaqiriladigan parametrli konstruktor. Bu ikkita konstruktor haddan tashqari yuklanishi tufayli bir sinfda tinch -totuv yashashi mumkin. Aslida, siz har qanday miqdordagi konstruktorni, agar ular yagona parametrlarga ega bo'lsa, belgilashingiz mumkin (ularning soni va turini hisobga olgan holda). Parametrli konstruktordan qanday foydalanish kerak? Hammasi oddiy! To'g'ridan-to'g'ri initsializatsiya: int a(7); // to’g’ri-to’g’ri initsializatsiya Fraction drob(4, 5); //to'g'ridan -to'g'ri ishga tushirilganda, Fraction (int, int) konstruktori chaqiriladi.
57. C++da initsializatsiyani nusxalash
Initsializatsiyani nusxalash
Oddiy o'zgaruvchilar singari, sinflar ham nusxa ko'chirish yordamida ishga tushirilishi mumkin: int a = 7; // nusxa ko'chirishni boshlash Fraction eight = Fraction(8); // nusxa ko'chirish boshlanishi, Fraction (8, 1) chaqiriladi Fraction nine = 9; // nusxa ko'chirishni boshlash. Tuzuvchi 9 ni Fraktsiyaga o'tkazish usullarini qidiradi, natijada Fraction (9, 1) konstruktoriga murojaat bo'ladi.
Shu bilan birga, sinfni ishga tushirishning bu shaklidan qochish tavsiya etiladi, chunki bu unchalik samarasiz bo'lishi mumkin. Bir xil boshlang'ich, to'g'ridan -to'g'ri ishga tushirish va nusxa ko'chirish boshlang'ich ma'lumotlarning asosiy turlari bilan bir xil bo'lsa -da, bu sinflarga umuman to'g'ri kelmaydi (garchi yakuniy natija ko'pincha bir xil bo'ladi). Bu masalani keyingi darslarda batafsil ko'rib chiqamiz. Qoida: O'zingizning sinflaringiz ob'ektlari bilan nusxa ko'chirishni ishlatmang. Konstruktorlar sonini kamaytirish Fraksiya klassi va ikkita konstruktorli (standart va parametrli) misolda standart konstruktor aslida ortiqcha. Biz bu sinfni shunday soddalashtira olamiz:
#include
class Fraction
{ private: int m_numerator;
int m_denominator;
public: // Jimlik bo’yicha konstruktor
Fraction(int numerator=0, int denominator=1)
{ assert(denominator != 0);
m_numerator = numerator;
m_denominator = denominator; }
int getNumerator()
{ return m_numerator; }
int getDenominator()
{ return m_denominator; }
double getValue() { return static_cast(m_numerator) / m_denominator; } };
58. C++da sinf tarkibidagi konstruktorlarni e’lon qilish va undan foydalanish
Konstruktorlar Agar sinfning (yoki strukturaning) barcha a'zolari ochiq bo'lsa, biz sinfni (yoki strukturani) to'g'ridan -to'g'ri boshlang'ich ro'yxati yoki bir xil initsializatsiya (C ++ 11 da) yordamida initsializatsiyalashimiz mumkin:
class Boo
{ public:
int m_a; int m_b; };
int main()
{ Boo boo1 = { 7, 8 }; // initsializatorlar ro’yxati Boo boo2 { 9, 10 }; // uniform-initsializatsiya (C++11) return 0; }

Download 132,23 Kb.

Do'stlaringiz bilan baham:
1   ...   15   16   17   18   19   20   21   22   ...   40




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish