vector sinfi

DOC 26 стр. 225,0 КБ Бесплатная загрузка

Предварительный просмотр (5 стр.)

Прокрутите вниз 👇
1 / 26
ma’ruza №6. vektorlar va massivlar maruza rejasi: 6.1 nusxa olish 6.2 asosiy amallar 6.3 vektor elementlariga murojaat 6.4 massivlar 6.5 misollar: palindrom kalit so’zlar: chuqur nusxalash, asosiy amallar, massivni initsializatsiya qilish, nusxalovchi konstruktor, palindrom, explicit konstruktori, massiv, yuzaki nusxalash, odatiy konstruktor, nusxalash. 6.1 nusxa olish vector sinfini №5 ma’ruzadagi kabi ko’rinishda qaraymiz class vector { int sz; // o’lchami double* elem; // elementga ko’rsatkich public: vector(int s) // konstruktor :sz(s), elem(new double[s]) { /* */ } // xotiradan // joy ajratyapti ~vector() // destruktor { delete[ ] elem; } // xotiradan ajratilgan // joyni bo’shatyapti // . . . }; shunday vektorlar biridan nusxa olamiz void f(int n) { vector v(3); // 3 ta elementli vektorni aniqlaymiz v.set(2,2.2); // ikkinchi elementi v[2]=2.2 ga teng vector v2 = v; // bu amal nima vazifani bajaryapti? // . . . } nazariy jixatdan v2 obyekt v obyektning nusxasi bo’lishi kerak, boshqacha aytganda …
2 / 26
lsa, ba’zi muammolar chiqishi mumkin. xususan vektorlar uchun bizning misoldagi v.sz==v2.sz va v.elem==v2.elem shartlar bajarilsa, vektorlar quyidagicha ko’rinishda bo’ladi: boshqacha aytganda v2 obyekt v obyektning elementlari nusxasini o’zida ifoda etmagan; ikkalasi xam birgalikda v obyektdan foydalanayapti. biz boshqa kod yozishimiz mumkin: v.set(1,99); // v[1]=99; v2.set(0,88); // v2[0]=88; cout v(10); // sozdayem vektor v, sostoyaщiy iz 10 chisel // double bundan ko’rinib turibdiki, inisializasiya to’la ma’noda konstruktor bilan aniqlanadi.standart string sinfi konstruktori dastlabki qiymat sifatida simvollar satri qabul qilsa, vector sinfi standart konstruktori esa parametr sifatida elementlar miqdorini qabul qiladi.odatda konstruktordan invariantni o’rnatish uchun foydalaniladi.agar biz sinf uchun yaxshi invariant aniqlay olmasak, demak sinf yomon ifodalangan yoki ma’lumotlar strukturasi yaxshi emas degan ma’noni anglatadi. argumentga ega konstruktorlar sinfga kuchli bog’liq bo’ladi, boshqa amallar standart strukturaga bog’liq. odatga ko’ra konstruktor nima uchun kerak bo’ladi? sinf obyektlarini inisializasiyalamasdan turib yaratish uchun kerak bo’ladi. bunga eng ko’p uchraydigan misol keltiramiz, vector sinf obyektlarini standart …
3 / 26
"", vector () kabi o’rnatilishi kerak. agar sinf biror ma’lumotga , resursga ega bo’lsa, albatta u destruktorga ega bo’lishi kerak.resurs deganda sinf boshqa obyektlardan olgan ma’lumotlar yoki uzatishi kerak bo’lgan ma’lumotlar va xakozolarni nazarda tutish kerak bo’ladi. oddiy misol sifatida xotirani olishimiz mumkin, new bilan joy ajratiladi delete[] bilan o’chiriladi. vector sinfi xam o’z elementlarini joylashtirish uchun joy talab qiladi va kerak bo’lganda bo’shatib beradi, shunga ko’ra unga destructor kerak bo’ladi. boshqa resurslar boshqa murakkab dasturlarda ishlatiladi bular - fayllar xisoblanadi(agar ochgan bo’lsangiz uni albatta bekitish kerak bo’ladi), bloklash, oqim deskriptorlari(thread handles), ikki tomonlama kanallar(sockets). oshkor konstruktorlar . konstruktor. misol qaraymiz. class complex { public: complex(double); // opredelyayet preobrazovaniye double v complex complex(double,double); // . . . }; complex z1 = 3.18; // ok: preobrazuyet 3.18 v (3.18,0) complex z2 = complex(1.2, 3.4); oshkormas turga keltirish ba’zi muammolarni keltirib chiqarishi mumkin, shuning uchun extiyot bo’lib foydalanamiz, aks xolda, kutimagan effektlarga …
4 / 26
or net vector v0(10); // ok void f(const vector&); f(10); // oshibka: preobrazovaniya int v vector net f(vector(10)); // ok kutilmagan akslantirishlar bo’lmasligi uchun biz til standartida mavjud instrumentdan foydalandik.ammo barcha konstruktorlar spesifika-tor explicit ega emaslar. agar shubxa qilsangiz tekshirib ko’ring. 6.3 vektor elemenlariga murojaat xaligacha vektor elementlariga murojaat qilish uchun set() va get(). funksiya a’zolardan foydalanamiz. bu usul ba’zi noqulayliklar keltirib chiqarishi mumkin.biz oddiy indeksasiyani xoxlaymiz: v[i]. bunga ko’ra operator[] kabi funksiya a’zoni aniqlaymiz, eng sodda variantini qaraymiz: class vector { int sz; // razmer double* elem; // ko’rsatkichna elementы public: // . . . double operator[](int n) { return elem[n]; } // vozvraщayem // element }; xammasi yaxshi va oddiy ammo juda sodda. indekslashni operator[]()) va o’qishni to’g’riladik ammo yozishni qanday to’g’rilash mumkin. vector v(10); int x = v[2]; // xorosho v[3] = x; // oshibka: v[3] ne mojet stoyat v levoy // chasti operatora = bu yerda …
5 / 26
/ . . . } e’tibor qiling elementlar miqdori kompilyasiya etapigacha ma’lum bo’lishi kerak, agar noma’lum bo’lsa ko’rsatkich bilan aniqlashimiz kerak bo’ladi.bu xolda vector sinfi elementlaridan massiv xosil qilinadi.qanday qilib massiv elementlari ‘otiraga joylashishini misol orqali ko’rsatamiz masala qaraymiz. void f2() { char lac[20]; // lokalnыy massiv; "jivet"” do konsa oblasti // vidimosti lac[7] = 'a'; *lac = 'b'; //ekvivalent instruksii lac[0]='b' lac[–2] = 'b'; // ?? lac[200] = 'c'; // ?? } bu funksiya kompilyasiya qilinadi, ammo ma’lumki barcha funksiya xam to’g’ri ishlayvermaydi []operatordan foydalanildi ammo u massiv chegaralaridan chiqib ketmasligi tekshirilmadi, shuning uchun xam bu f2() funksiya ishlaydi ammo natijada lac[–2] va lac[200] yozuvlar dasturni salbiy natijalarga olib keladi. xar doim massiv o’lchamlari xaqida gap ketganda dasturchi o’lchamlar masalasini o’zi aniqlagan va tekshirgan bo’lishi zarurligini aytib o’tamiz. bu ishlarni dasturchi o’rniga kompilyator aniqlashi mumkinmi, massiv lac faqat 20 ta element olishi mumkinligi, bunday lac[200] bo’lishi mumkin emasligini ? …

Хотите читать дальше?

Скачайте все 26 страниц бесплатно через Telegram.

Скачать полный файл

О "vector sinfi"

ma’ruza №6. vektorlar va massivlar maruza rejasi: 6.1 nusxa olish 6.2 asosiy amallar 6.3 vektor elementlariga murojaat 6.4 massivlar 6.5 misollar: palindrom kalit so’zlar: chuqur nusxalash, asosiy amallar, massivni initsializatsiya qilish, nusxalovchi konstruktor, palindrom, explicit konstruktori, massiv, yuzaki nusxalash, odatiy konstruktor, nusxalash. 6.1 nusxa olish vector sinfini №5 ma’ruzadagi kabi ko’rinishda qaraymiz class vector { int sz; // o’lchami double* elem; // elementga ko’rsatkich public: vector(int s) // konstruktor :sz(s), elem(new double[s]) { /* */ } // xotiradan // joy ajratyapti ~vector() // destruktor { delete[ ] elem; } // xotiradan ajratilgan // joyni bo’shatyapti // . . . }; shunday vektorlar biridan nusxa olamiz void f(int n) { vector v(3); // 3 ta elementli vekt...

Этот файл содержит 26 стр. в формате DOC (225,0 КБ). Чтобы скачать "vector sinfi", нажмите кнопку Telegram слева.

Теги: vector sinfi DOC 26 стр. Бесплатная загрузка Telegram