Javoblar Dasturlash asoslari


class Boo { public: int m_a; int m_b; }; int main()


Download 57.96 Kb.
bet18/30
Sana08.03.2023
Hajmi57.96 Kb.
#1250414
1   ...   14   15   16   17   18   19   20   21   ...   30
Bog'liq
Javoblar Dasturlash asoslari

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; }
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 konstruktorlarParametrli 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:
{ 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
57. C++da initsializatsiyani nusxalashInitsializatsiyani 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:

Download 57.96 Kb.

Do'stlaringiz bilan baham:
1   ...   14   15   16   17   18   19   20   21   ...   30




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