13.1 Strukturalar
Struktura - bu ma'lumotlarni bir butun nomlangan elementlar to’plamiga birlashtirish. Struktura elementlari (maydonlar) har xil turda bo‘lishi mumkin va ular har xil nomlarga ega bo‘lishi kerak.
Strukturali tur quyidagicha aniqlanadi: struct {}
Strukturada, albatta. bitta komponenta bo‘lishi kerak. Struktura turidagi o'zgaruvchi quyidagicha ta’riflanadi:
;
Struktura turidagi o'zgaruvchi ta'riflanganda initsializatsiya qilinishi mumkin:
=;
Strukturani initsializatsiyalash uchun uning elementlari qiymatlari figurali qavslarda tavsiflanadi.
Misollar:
struct Student {
char name[20]; int kurs; float rating;
};
Student s={"Qurbonov", 1, 3.5};
struct
{
char name[20]; char title[30j; float rate;
}employee= {"Ashurov", "direktor", 10000};
Strukturalarni o‘z!ashtirish. Bitta tuzilma turdagi o‘zgaruvchilar uchun o'zlashtirish operatsiyasi aniqlangan. Bunda har bir elementdan nusxa olinadi. Masalan:
Student ss = s;
Struktura elementlariga murojaat. Struktura elementlariga murojaat aniqlangan ismlar yordamida bajariladi:
Struktura_nomi >. < element_nomi >
Masalan:
employee.name - "Ashurov" qiymatga ega bo'lgan o‘zgaruvchi; employee.rate - 10000 qiymatga ega boigan butun turdagi o'zgaruvchi Quyidagi misolda fazoda berilgan nuqtaviy jismni tasvirlovchi komponentalari jism massasi va koordinatalaridan iborat struktura kiritilgan boiib, nuqtaning koordinatalar markazigacha boigan masofasi hisoblangan.
#include using namespace std;
#include struct {
double mass; float coord[3];
} point = {12.3, {1.0, 2.0, -3.0}}; int main()
{
int i;
float s=0.0; for (i=0; i<3; i + +) s+ =point.coord[i]*point.coord[i]; cout«"\n masofa = "«sqrt(s); return 0;
}
Strukturalar va funksiyalar. Strukturalar funksiyalar argumentlari sifatida yoki funksiya qaytaruvchi qiymat sifatida kelishi mumkin. Bundan tashqari, funksiya argumenti sifatida struktura turidagi massiv kelishi mumkin.
Misol uchun kompleks son modulini hisoblash dasturini keltiramiz:
double modul(complex a)
{return sqrt(a.real*a.real + a.imag*a.imag}
Ikki kompleks son yig'indisini hisoblash funksiyasi: complex add(complex a, complex b)
{complex c; c.real = a.real + b.real;
imag = a.imag+b.imag; return c;
}
Misol:
#include < iostream > using namespace std; struct person {
char name[20]; int year;
};
person old_person(person a[], int n) int i;
person s=a[0]; for(i = l; is.year) s=a[i]; return s;
}
void print_person(person s)
{
cout«"name = "«s.name; cout« "year=" «s.year «endl;
}
int main()
{
person a[] = {{"smit", 34}, {"bobbi", 45}, {"pit", 56}}; person s = old_person(a, 3); print_person(s); return 0;
Funksiyada bitta struktura turidagi o‘zgaruvchi qiymatini o‘zgartirish mumkin emas, lekin massiv elementlari qiymatini o'zgartirish mumkin: #include < iostream > using namespace std; struct goods { char name[20]; long price; float percent;
};
void change_percent(goods a[], int n, float percent)
{
int i;
for(i = l; i
}
void print_goods(goods s)
{
cout«s.name«" "<
}
void all_print(goods a[], int n)
{
int i;
for(i=0; i
};
int main()
{
goods a[] = {{"smit", 34, 0.5}, {"bobbi", 45, 0.7}, {"pit", 56, 0.8}};
all_print(a, 3);
change_percent(a, 3, 0.5);
all_print(a, 3);
int ii; cin»ii;
return 0;
}
13.2 Sinf ta’rifi
Sinf struktura tushunchasi kengavtmasi sifatida. Sinflarni eng sodda holda quyidagicha tasvirlash mumkin:
Sinf-kaliti Sinf-soni {komponentalar ro'yxati}
Sinf komponentalari sodda holda turlangan maiumotlar va funksiyalardan iborat boiadi. Figurali qavslarga olingan komponentalar ro‘yxati sinf tanasi deb ataladi. Sinfga tegishli funksiyalar komponenta-funksiyalar yoki sinf funksiyalari deb ataladi.
Sinf kaliti sifatida struct xizmatchi so‘zi ishlatilishi mumkin. Masalan, quyidagi konstruksiya kompleks son sinfini kiritadi. struct complex {
double real; double imag;
void define (double re = 0.0, double im = 0.0)
{
real = re; imag=im;
} J void display (void)
{
cout< ="real = "«real; cout< ="imag="«imag;
}
};
Strukturadan bu sinfning farqi shuki. komponenta maiumotlardan (real, imag) tashqari ikkita komponenta funksiya (defme() va display()) kiritilgan.
Bu kiritilgan sinf o‘zgaruvchilar turi deb qaralishi mumkin. Bu turlar yordamida konkret obyektlarni quyidagicha tasvirlash mumkin:
Misol uchun: complex x, y; complex dim[8|;
Sinfga tegishli obyektlar quyidagicha tasvirlanadi; Sinf-nomi.obyekt-nomi
Dasturda obyekt komponentasiga quyidagicha murojaat qilish mumkin:
Sinf-nomi.obyekt-nomi:: komponenta-nomi yoki soddaroq holda Obyekt-nomi. Element-nomi
Misol uchun: x.real= 1.24;
x.imag=0.0; dim[3].Real = 0.25; dim[3].Imag=0.0;
Sinfga tegishli funksiyalarga quyidagicha murojaat qilinadi:
obyekt-nomi.funksiya-nomi
Misol uchun:
x. define(0.9) (Bu holda real = 0.9 va imag=0.01 x. define(4.3,20.0) (Bu holda kompleks son 4.3 + i*20.0) display funksiyasi ekranda kompleks son qiymatlarini tasvirlaydi. Komponenta o‘zgaruvchilar va funksiyalar. Sinf komponenta o‘zgaruvchilari sifatida o‘zgaruvchilar, massivlar, ko‘rsatkichlar ishlati- lishi mumkin. Elementlar ta'riflanganda initsializatsiya qilish mumkin emas. Buning sababi shuki, sinf uchun xotiradan joy ajratilmaydi. Komponenta elementlariga komponenta funksiyalar orqali murojaat qilin- ganda, faqat nomlari ishlatiladi. Sinfdan tashqarida sinf elementlariga emas obyekt elementlariga murojaat qilish mumkin. Bu murojaat ikki xil bo'lishi mumkin.
Do'stlaringiz bilan baham: |