Konstruktorlar. Konstruktorlar bu Klass komponenta funksiyalari bo‘lib, ob’ektlarni avtomatik initsializatsiya qilish uchun ishlatiladi.
Konstruktorlar ko‘rinishi quyidagicha bo‘lishi mumkin:
Klass nomi (formal parametrlar ro‘yxati)
{konstruktor tanasi}
Bu komponenta funksiya nomi Klass nomi bilan bir xil bo‘lishi lozim.
Misol uchun complex Klassi uchun konstruktorni quyidagicha kiritish mumkin :
complex (double re = 0.0; double im = 0.0 )
{real=re; imag=im;}
Konstruktorlar uchun qaytariluvchi tiplar, xatto void tipi ham ko‘rsatilmaydi. Dasturchi tomonidan ko‘rsatilmagan holda ham ob’ekt yaratilganda konstruktor avtomatik ravishda chaqiriladi.
Masalan ob’ekt complex cc; shaklida aniqlangan bo‘lsa, konstruktor avtomatik chaqirilib
real va imag parametrlari avtomatik ravishda 0.0 qiymatlariga ega bo‘ladi.
Ko‘zda tutilgan holda parametrsiz konstruktor va quyidagi tipdagi nusxa olish konstruktorlari yaratiladi: T :: T (const T&)
Misol uchun
class F
{...
public : F(const T&)
...
}
Klassda bir nechta konstruktorlar bo‘lishi mumkin, lekin ularning faqat bittasida parametrlar qiymatlari oldindan ko‘rsatilgan bo‘lishi kerak.
Konstruktor adresini hisoblash mumkin emas. Konstruktor parametri sifatida o‘z Klassining nomini ishlatish mumkin emas, lekin bu nomga ko‘rsatkichdan foydalanish mumkin.
Konstruktorni oddiy komponenta funksiya sifatida chakirib bo‘lmaydi. Konstruktorni ikki xil shaklda chaqirish mumkin :
Klass_nomi .Ob’ekt_nomi (konstruktor_xaqiqiy_parametlari)
Klass_nomi (konstruktor_xaqiqiy_parametlari)
Birinchi shakl ishlatilganda xaqiqiy parametrlar ro‘yxati bo‘sh bo‘lmasligi lozim. Bu shakldan yangi ob’ekt ta’riflanganda foydalaniladi:
complex SS(10.3; 0.22)
// real=10.3; SS.imag= 0.22;
complex EE (2.3)
// EE . real= 2.3;
EE.imag= 0.0;
complex D() // xato
Konstruktorni ikkinchi shaklda chaqirish nomsiz ob’ekt yaratilishiga olib keladi. Bu nomsiz ob’ektdan ifodalarda foydalanish mumkin.
Misol uchun :
complex ZZ= complex (4.0;5.0);
Bu ta’rif orkali ZZ ob’ekt yaratilib, unga nomsiz ob’ekt qiymatlari(real= 4.0; imag= 5.0) beriladi;
Konstruktor nomi Klass nomi bilan bir xil bo‘lishi lozimdir. Misol uchun siz employee Klassdan foydalansangiz, konstruktor ham employee nomga ega bo‘ladi. Agar dasturda konstruktor ta’rifi berilgan bo‘lsa ob’ekt yaratilganda avtomatik chaqiriladi. Quyidagi dasturda employee nomli Klass kiritilgandir:
class employee
{
public:
employee(long, float);
void show_employee(void);
private:
long employee_id;
float salary;
};
Konstruktor ta’rifi:
employee::employee(long empl_id, float sal)
{
employee_id = empl_id;
if (salary < 50000.0)
salary = sal;
else
salary = 0.0;
}
Shu Klassdan foydalanilgan dastur:
#include using namespace std;
class employee
{
public:
employee(long, float);
void show_employee(void);
private:
long employee_id;
float salary;
};
employee::employee(long empl_id, float sal)
{
employee_id = empl_id;
if (salary < 50000.0)
salary = sal;
else
salary = 0.0;
}
void employee::show_employee(void)
{
cout << "Nomer: " << employee_id << endl;
cout << "Maosh: " << salary << endl;
}
int main()
{
employee worker(101, 10101.0);
cout<<"ishchi"<worker.show_employee();
return 0;
}
Konstruktordan foydalanib ob’ekt ta’rifilanganda parametr uzatish mumkin: employee worker(101, 10101.0);
Agar dasturda employee tipidagi ob’ektlar mavjud bo‘lsa har birini quyidagicha initsializatsiya qilish mumkin
employee worker(101, 10101.0);
employee secretary(57, 20000.0);
employee manager(1022, 30000.0);
Konstruktorlar va ko‘zda tutilgan qiymatlar. Konstruktorlarda ko‘zda tutilgan qiymatlardan ham foydalanish mumkindir. Misol uchun quyidagi konstruktor employee maoshi qiymatini dasturda ko‘rsatilmagan bo‘lsa 10000.0 teng qilib oladi:
Konstruktorlarni qo‘shimcha yuklash. C++ tilida konstruktorlarni ham qo‘shimcha yuklash mumkindir. Quyidagi dasturda konstruktor employee qo‘shimcha yuklangandir. Birinchi konstruktor, dastur xizmatchi, nomer va oyligi ko‘rsatilishini talab qiladi. Ikkinchi konstruktor oylikni kiritilishini so‘raydi. Klass ta’rifi ichida ikkala konstruktor prototipi ko‘rsatilishi lozim:
#include using namespace std;
class employee
{
public:
employee(long, float);
employee(long);
void show_employee(void);
private:
long employee_id;
float salary;
};
employee::employee(long employee_id, float salary)
{
employee::employee_id = employee_id;
if (salary < 50000.0) employee::salary = salary;
else
employee::salary = 0.0;
}
employee::employee(long employee_id)
{
employee::employee_id = employee_id;
do
{
cout << "Maosh kiriting $50000 dan kichik: ";
cin >> employee::salary;
}
while (salary >= 50000.0);
}
void employee::show_employee(void)
{
cout << "Nomer: " << employee_id << endl;
cout << "Maosh: " << salary << endl;
}
int main()
{
cout<<"ishchi"<employee worker(101, 10101.0);
worker.show_employee();
cout<<"manager"<employee manager(102);
manager.show_employee();
return 0;
}
Ob’ektlar massivlari. Ob’ektlar massivi ta’riflash uchun Klass ko‘zda tutilgan (parametrsiz) konstruktorga ega bo‘lishi kerak.
Ob’ektlar massivi ko‘zda tutilgan konstruktor tomonidan, yoki har bir element uchun konstruktor chaqirish yo‘li bilan initsializatsiya qilinishi mumkin.
class complex a[20]; //ko‘zda tutilgan parametrsiz konstruktorni chaqirish
class complex b[2]={complex(10),complex (100)};
//oshkor chaqirish
Quyidagi misolda player, Klassi kiritiladi. Dasturda Klass funksiyasi show_player va konstruktor tashqarisida ta’riflanadi. So‘ngra playertipidagi ikki massiv yaratilib, har biri xakidagi ma’lumot ekranga chikariladi
#include #include using namespace std;
class player
{
public:
player();
player (string name,int weight, int age);
void show_player (void);
private:
string name;
int weight;
int age;
};
player::player()
{
name="";
weight = 0;
age = 0;
};
player::player(string name,int weight, int age)
{
player::name=name;
player::weight = weight;
player::age = age;
};
void player::show_player (void)
{
cout<<"Ism: " << name << endl;
cout<<"Vazn: " << weight << endl;
cout<<"Yosh: " << age << endl;
}
class array_player
{ public:
void show_array(player a[],int n)
{ for(int i=0;i{a[i].show_player();cout<void input_array(player a[],int n)
{string name;int weight,age;
for(int i=0;i{cin>>name>>weight>>age;
a[i]=player(name,weight,age);
}
}
};
int main()
{array_player arr;
Player happy[]={player("Olimov",58,24),
player("Alimov",72,35)};
arr.show_array(happy,2);
player matt[2];
arr.input_array(matt,2);
arr.show_array(matt,2);
return 0;
}
Initsializatorlar ro‘yxati. Konstruktor yordamida ob’ekt ma’lumotlarni initsiyalizatsiyalashni ikkita usuli mavjud.
Birinchi usulda parametrlar qiymatlari konstruktor tanasiga uzatiladi. Ikinchi usulda esa ushbu Klassdagi initsializatorlar ro‘yxatidan foydalanish nazarda tutilgan. Bu ro‘yxat parametrlar ro‘yxati va konstruktor tanasi orasiga joylashadi. Ro‘yxatdagi har bir initsializator konkret aniq komponentaga bog‘liq va quyidagi ko‘rinishga ega:
()
Destruktorlar. Klassning biror ob’ekti uchun ajratilgan xotira ob’ekt yukotilgandan so‘ng bo‘shatilishi lozimdir.
Klasslarning maxsus komponentalari destruktorlar, bu vazifani avtomatik bajarish imkonini yaratadi.
Destruktorni standart shakli quyidagicha :
~ Klass_nomi ( ) {destruktor tanasi}
Destruktor parametri yoki qaytariluvchi qiymatga ega bo‘lishi mumkin emas (xatto void tipidagi).
Agar Klassda oshkor destruktor mavjud bo‘lmasa, ko‘zda tutilgan destruktor chaqiriladi.
Dastur ob’ektni o‘chirganda destruktor avtomatik chaqiriladi.
Misol:
#include using namespace std;
class Person
{
public:
Person ()
{
cout<<"Yaratidi"<}
~Person ()
{
cout<<"O'chirldi"<}
};
int main()
{
{
Person work;
}
int kk;cin>>kk;
return 0;
}
Natija
Yaratidi
O'chirldi
Ma’lumotlar elementidan birgalikda foydalanish. Odatda, ma’lum Klass ob’ektlari yaratilayotganda, har bir ob’ekt o‘z-o‘zining ma’lumotlar elementlari to‘plamini oladi. Biroq shunday hollar ham yuzaga keladiki, unda bir xil Klasslar ob’ektlariga bir yoki bir nechta ma’lumotlar elementlaridan (statik ma’lumotlar elementlaridan) birgalikda foydalanish kerak bo‘lib qoladi. Bunday hollarda ma’lumotlar elementlari umumiy yoki juz’iy deb e’lon qilinadi, keyin esa tur oldidan, quyida ko‘rsatilganidek, static kalit-so‘z keladi:
private;
static int shared_value;
Klass e’lon qilingach, elementni Klassdan tashqaridagi global o‘zgaruvchi sifatida e’lon qilish kerak. Bu quyida shunday ko‘rsatilgan:
int class_name::shared_value;
Navbatdagi dastur book_series Klassini aniqlaydi. Bu Klass (seriya)ning barcha ob’ektlari (kitoblari) uchun bir xilda bo‘lgan page_count elementidan birgalikda foydalanadi. Agar dastur ushbu element qiymatini o‘zgartirsa, bu o‘zgarish shu ondayoq barcha Klass ob’ektlarida o‘z aksini topadi:
#include using namespace std;
class book_series
{
public:
book_series(float);
void show_book(void);
void set_pages(int) ;
private:
static int page_count;
float price;
};
int book_series::page_count;
void book_series::set_pages(int pages)
{
page_count = pages;
}
book_series::book_series(float price)
{
book_series::price = price;
}
void book_series:: show_book (void)
{
cout << "Narx: " << price << endl;
cout << "Betlar: " << page_count << endl;
}
int main()
{
book_series programming(213.95);
book_series word(19.95);
word.set_pages(256);
programming.show_book ();
word.show_book() ;
cout << endl << "page_count ning o'zgarishi " << endl;
programming.set_pages(512);
programming.show_book();
word.show_book();
return 0;
}
Ko‘rinib turganidek, Klass page_count ni static int sifatida e’lon qiladi. Klassni aniqlagandan so‘ng, dastur shu vaqtning o‘zida page_count elementini global o‘zgaruvchi sifatida e’lon qiladi. Dastur page_count elementini o‘zgartirganda, o‘zgarish shu vaqtning o‘zidayoq book_series Klassining barcha ob’ektlarida namoyon bo‘ladi.
Agar ob’ektlar mavjud bo‘lmasa, public static atributli elementlardan foydalanish. Klass elementini static kabi e’lon qilishda bu element ushbu Klassning barcha ob’ektlari tomonidan birgalikda qo‘llanadi. Biroq shunday vaziyatlar yuz berishi mumkinki, dastur hali ob’ektni yaratganicha yo‘q, ammo u elementdan foydalanishi kerak. Elementdan foydalanish uchun dastur uni public va static sifatida e’lon qilishi kerak. Masalan, quyidagi dasturda, xatto book_series Klassidagi ob’ektlar mavjud bo‘lmasa ham, bu Klassning page_count elementidan foydalaniladi:
#include using namespace std;
class book_series
{
public:
static int page_count;
private:
float price;
};
int book_series::page_count;
int main()
{
book_series::page_count = 256;
cout << "page_count ning joriy qiymati " << book_series::page_count <<"ga teng"<return 0;
}
Bu o‘rinda, Klass page_count Klassi elementini public sifatida e’lon qilgani uchun, xatto agar book_series Klassidagi ob’ektlar mavjud bo‘lmasa ham, dastur Klassning ushbu elementiga murojaat qilishi mumkin.
Statik funksiya elementlardan foydalanish. Avvalgi dastur ma’lumotlar statik elementlarining qo‘llanishini ko‘rsatib bergan edi. C++xuddi shunday usul bilan statik funksiya-elementlar (usullar)ni aniqlash imkonini beradi. Agar statik usul yaratilayotgan bo‘lsa, dastur bunday usulni, xatto uning ob’ektlari yaratilmagan holda ham, chaqirib olishi mumkin. Masalan, agar Klass Klassdan tashqari ma’lumotlar uchun qo‘llanishi mumkin bo‘lgan usulga ega bo‘lsa, siz bu usulni statik qila olishingiz mumkin bo‘lardi. Funksiyadan foydalanish uchun dastur uni public va static sifatida e’lon qilishi kerak. Masalan, quyidagi dasturda, xatto book_series Klassidagi ob’ektlar mavjud bo‘lmasa ham, bu Klassning show_count() usulidan foydalaniladi.
XULOSA Bugungi kunda yurtimizda Axborot Texnologiyalarini rivojlantirish yo`lida juda ko’p ishlar amalga oshirilmoqda. Bu borada hukumatimiz ko‘zga ko’rinarli ishlarni amalga oshirmoqda. Xususan, ko‘plab korxona va muassasalarni avtomatlashtirish, ularning ishini yengilashtirish uchun bir talay dasturlar amalga oshirilmoqda.
Windows Forms yordamida siz aqlli mijozlarni rivojlantirasiz. Aqlli mijozlar - bu grafik jihatdan boy dasturlar, ularni joylashtirish va yangilash oson, ular Internetga ulanganda yoki ular bilan aloqani uzganda ishlay oladilar va mahalliy kompyuterdagi resurslarga Windows-ga asoslangan an'anaviy dasturlarga qaraganda xavfsizroq kira oladilar.
Kurs ishi davomida Windows Forms ning asosiy va rivojlangan xususiyatlarini bilib oldik. Visual Studio .NET-dagi vositalar va boshqaruv elementlaridan foydalangan holda biz foydalanuvchilar uchun qulay va intuitiv dasturlarni har qachongidan ham tezroq yozishimiz mumkin.