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 initsializatsiyalaydi.
Dasturni bajarish natijasi:
0/1
E'tibor bering, surat (m_numerator) va maxraj (m_denominator)
standart konstruktorda o‘rnatgan qiymatlarimiz bilan initsializatsiyalangan.
Bu
shunday foydali xususiyatki, deyarli har bir sinf o‘z standart
konstruktoriga ega. Busiz, ularga oddiy
qiymatlarni aniq belgilab
bermagunimizcha, surat va maxraj qiymatlari avtomatik olinardi (bu esa
xotiraning behuda sarflanishidir).
Parametrli konstruktorlar. Standart konstruktor sinflarimizni
standart qiymatlarga o‘tkazilishini ta'minlash uchun juda yaxshi bo‘lsa-da,
sinfimiz obyektlari 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 –listingda berilgan.
#include
using namespace std;
class Fraction
{
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 (double) m_numerator /
m_denominator; }
};
E'tibor bering, hozirda ikkita konstruktor bor:
agar qiymat bermasak
chaqiriladigan standart konstruktor va agar qiymatlarni taqdim qilsak
chaqiriladigan
parametrli
konstruktor.
Bu
ikkita
konstruktor
funksiyalarning qo’shimcha yuklanishi tufayli
bir sinfda hosil qilinishi
mumkin. Aslida, har qanday miqdordagi konstruktorni,
agar ular yagona
parametrlarga ega bo‘lsa, belgilashingiz mumkin (ularning soni va turini
hisobga olgan holda).
Parametrli konstruktor foydalanish oson. Buning uchun to’g’ridan-
to’g’ri initsializatsiyadan foydalanish kerak.
int a(7); // to‘g‘ridan-to‘g‘ri initsializatsiya
Fraction drob(4, 5); //to‘g‘ridan-to‘g‘ri initsializatsiya, Fraction (int,
int) konstruktori chaqiriladi
Bu yerda kasrni 4 va 5 raqamlari bilan initsializatsiya qildik, natija 4/5.
C++11 da uniform-initsializatsiyadan foydalanishimiz mumkin:
int a { 7 }; // uniform-initsializatsiya
Fraction drob {4, 5};
Parametrli konstruktor uchun faqat bitta
parametrni belgilashimiz
mumkin, ikkinchi qiymat esa standart qiymat bo‘ladi:
Fraction seven(7);
Konstruktorlar uchun standart qiymatlar boshqa funksiyalar bilan bir
xil ishlaydi, shuning uchun yuqoridagi misolda seven(7) ni
chaqirganimizda, ikkinchi parametr 1 (standart) bo‘lgan Fraction (int, int)
chaqiriladi.