Psixolingvistikada matn va diskurs tushunchalarining lingvopragmatik xususiyatlari
MAVZU: Sinfning virtual metodlari va Ularni ishlatish mexanizmlari. Abstrakt sinflar, ularning mo’ljallanishi va xususiyatlari REJA : 1) Sinfning virtual metodlari haqida umumiy tushuncha. 2) Abstrakt sinflarga doir masalalar yechish. 3) Berilgan masalaning dasturiy qismi. 4) Xulosa.
MAVZU : Sinfning virtual metodlari va Ularni ishlatish mexanizmlari. Abstrakt sinflar, ularning mo’ljallanishi va xususiyatlari Voris olish va protected spetsifikatori. Oldingi darslarda biz C++ tilida meros qanday ishlashi haqida gapirgan edik. Barcha misollarimizda biz ochiq merosdan foydalandik. Ushbu darsda biz merosning ushbu turini, shuningdek, ikkita boshqa turni ko'rib chiqamiz: private va protected. Shuningdek, ushbu meros turlari a'zolarga kirishga ruxsat berish yoki cheklash uchun kirish spesifikacilari bilan qanday o'zaro bog'lanishi haqida gaplashamiz. protected kirish spetsifikatori. Biz allaqachon sinf a'zolariga kim kirishi mumkinligini belgilaydigan private va public kirish spetsifikatorlarini ko'rib chiqdik. Eslatib o tamiz, public a zolari hamma uchun ochiq, privateʻ ʼ a zolarga faqat private a zo bilan bir xil sinf a zolari kirishlari mumkin. Bu ʼ ʼ ʼ shuni anglatadiki, avlod sinflari ajdod sinfining shaxsiy a'zolariga bevosita kira olmaydi! class Parent { private: int m_private; public: int m_public; }; Izoh: public = “ochiq”, private = “xususiy”, protected = “himoyalangan” C ++ da biz hali gapirmagan uchinchi kirish spetsifikatsiyasi mavjud, chunki u faqat meros kontekstida foydalidir. protected kirish spetsifikatori sinf a'zolariga do'stona va avlod sinflariga kirish imkonini beradi. Sinf tanasidan tashqarida protected a'zoga kirish yopiq . Agar siz meros turini o'zingiz belgilamagan bo'lsangiz, C++ da standart meros turi private bo'ladi (xuddi shunday sinf a'zolari uchun, agar boshqacha ko'rsatilmagan bo'lsa). Bu bizga 9 ta kombinatsiyani beradi: 3 ta kirish spetsifikatsiyasi (public, private va protected) va 3 ta meros turi (public, private va protected). Xo'sh, ikkalasi o'rtasidagi farq nima? Muxtasar qilib aytganda, meros olishda ajdod a'zosining kirish spetsifikatsiyasi avlod sinfida (meros turiga qarab) o'zgartirilishi mumkin. Boshqacha qilib aytganda, ajdod sinfida public yoki protected a'zolar avlod sinfida private bo'lishi mumkin. Bu biroz chalkash tuyulishi mumkin, ammo bu unchalik yomon emas. Biz buni hozir aniqlaymiz, ammo undan oldin quyidagi qoidalarni eslang: Sinf har doim o'zining (meroslanmagan) a'zolariga kirish huquqiga ega. Sinf a'zosiga kirish uning kirish spetsifikatsiyasiga asoslanadi. Avlod sinfi ajdod- sinfdagi ushbu a'zolarning kirish spetsifikatsiyasi asosida ajdod-sinfning meros qilib olingan a'zolariga kirish huquqiga ega. public turdagi meros. Ochiq meros - eng ko'p qo'llaniladigan meros turlaridan biri. Siz boshqa turlarni ko'rishingiz yoki ishlatishingiz juda kam uchraydi, shuning uchun asosiy e'tibor merosning ushbu turini tushunishga qaratilishi kerak. Yaxshiyamki, ochiq meros barcha turdagi eng engil va eng oddiy hisoblanadi. Agar siz ajdod
sinfidan public turida meros olsangiz, meros qolgan public a zolar ochiqʼ qoladi, meros qilib olingan protected a zolar. ʼ OOP (O bj e ct O ri e nt e d P r og ra mm i n g - Oby e k t ga y o' na lt i r i l ga n dast ur la sh ) - b u bi ro n bi r ma qs ad ga yo 'n al t i r i l ga n dast ur la sh de g an ma' no ni ang lat adi . P r ot s e du ra vi y dast ur la sh - bu ma' lu mo t la rg a i s h lo v be r ad i g an pr ot se d ur al ar y ok i f unk t si ya la rn i y oz i s h , o b' e k t g a yo 'n al t i ri lg an dast ur la sh e s a ma' lu mo t va fu nk t s i y al ar ni o 'z i ch i g a ol ga n ob 'e k t la rn i ya ra t i sh h a qi da. Ob' e k t g a yo 'n al t i ri lg an da st u rl as h pr ot se s su al da st u rl as h d an bi r qat or afz al li k l ar ga e ga : O O P t e z r o q v a b a j a r i l i s h i o s o n r o q O O P d a s t u r l a r n i n g a n i q t u z i l i s h i n i t a ' m i n l a y d i O O P C + + k o d i n i D R Y " D o n ' t R e p e a t Y o u r s e l f " s a q l a s h g a y o r d a m b e r a d i v a k o d n i s a q l a s h , o ' z g a r t i r i s h v a d i s k r a s k a d r o v k a q i l i s h n i o s o n l a s h t i r a d i . O O P k o d n i k a m v a i s h l a b c h i q a r i s h v a q t i n i q i s q a r t i r g a n h o l d a t o ' l i q q a y t a i s h l a t i l a d i g a n i l o v a l a r n i y a r a t i s h g a i m k o n b e r a d i . C + + - b u o b' e k t g a y o' na lt i r i l ga n da st u rl as h t i l i . C + + d ast u rl as h t i li da h amm a na rs a u ni ng x us us i y at lar i v a us ul la ri bi la n bi r q at o rd a si n fll ar va ob ye k t la r bi lan b og 'l i q . C + + d ast u rl as h t i li da bi z si nf ya ra t di k , My Cl a ss no ml i cl ass ya ra t di k , sh u ni ng u ch un b un da n fo yd al an i b o by e k t y ar at ami z. O b'e k t ni ya ra t i sh uc h u n My Cl a ss si n f no mi ni , so 'n gr a ob 'e k t no mi ni k o 'r sat i n g. 12 .Ustuvor navbat hosil qiling. Unga yangi element qo’shing. #include <iostream> #include <iterator> #include <queue> // Queue kutubxonasini ulash using namespace std; int main() { priority_queue <int> Navbat; // Navbat yaratish int n; cout << "Nechta son kiritasiz ? " << endl; cin>>n; for (int h = 0; h < n; h++) { int a; cout <<"Navbatning "<<h+1<<"- elementini kiriting = ";cin >> a;
Navbat.push(a); // Navbatga element qo'shish } cout << endl; cout << "Eng birinchi elementi: " << Navbat.top() << endl; // Navbat.pop(); // Navbatdan element o'chirish // cout << "O'chirilganidan keyingi birinchi element: " << Navbat.front() << endl; if (!Navbat.empty()) cout << "Navbat bo'sh emas!"; cout<<"Navnatning elementlari : \n"; for (int i=0; i<n; i++) { cout<<Navbat.top()<<" "; Navbat.pop(); }return 0;} Distance (Masofa) nomli sinf hosil qiling. Uning maydonlari butun sonli fut va haqiqiy tipdagi dyum qiymatlaridan iborat. Bunday holda, dyum qiymati 12.0 dan oshmasligi kerak. Agar belgilangan shart bajarilmasa istisnolarni generatsiya qiling. #include <iostream> using namespace std; class Distance { int m_fut; float m_dyum; public: class Dyum12_err{}; class Fut10_err{};
Distance() { m_fut=0; m_dyum=0; } Distance(int a,float b) { if(b >= 12) throw Dyum12_err(); if(a < 0) throw Fut10_err(); m_fut = a; m_dyum = b; } void setValue(int a,float b) { if(b>=12) throw Dyum12_err(); if(a<0){ throw Fut10_err();} m_fut = a; m_dyum = b; } }; int main() { try { Distance distanca1; int a;// fut float b; // dyum cout<<"Futni kitiring a = "; cin>>a; cout<<"Dyumni kiriting b = "; cin>>b; Distance dis2(a,b); distanca1.setValue(a,b); } catch(Distance :: Dyum12_err) { cout<<"Dyum qiymati xato kiritildi."<<endl; } catch(Distance :: Fut10_err) { cout<<"Fut qiymati xato kiritildi."; } return 0; }