II.3. C++ dasturlash tilida operatorlarni ishga tushirish (While va While do operatori misolida)
While operatorini dasturlarda ishga tushirish.
Komponenta funktsiya albatta sinf tanasida ta'riflangan bo’lishi lozim. Global funktsiyalardan farqli komponenta funktsiya strukturaning hamma komponentalariga murojaat qilishi mumkin. Funktsiyaning faqat prototipi emas to’la ta'rifi struktura tanasida joylashgan bo’lsa, bu funktsiya joylashtiruvchi (inline) funktsiya hisoblanadi. Ma'lumki inline funktsiyalarda tsikllar, kalit bo’yicha o’tish operatori ishlatilishi mumkin emas. Bundan tashqari bunday funktsiyalar rekursiv funktsiya bo’lolmaydi. Bu chegaralarni engish uchun struktura tanasiga faqat funktsiya prototipi joylashtirilib, funktsiyaning to’la ta'rifi struktura tashqarisida dasturga kiruvchi boshqa funktsiyalar bilan birga beriladi. Komponenta funktsiyani struktura tashqarisida ta'riflanganda, qaysi strukturaga tegishli ekanligini qo’yidagi shaklda ko’rsatiladi:
Struktura-nomi :: Komponenta funktsiya-nomi
Struktura tanasiga komponenta funktsiya prototipi qo’yidagi shaklda joylashtiriladi:
Tip funktsiya-nomi(formal-parametrlar-ta'rifi)
Struktura tashkarisida funktsiya qo’yidagi shaklda ta'riflanadi:
Tip struktura-nomi :: funktsiya-nomi(formal-parametrlar-spetsifikatsiyasi) { funktsiya tanasi };
Bu holda funktsiyalar joylashtiriluvchi {inline) deb qaraladi. Funktsiya struktura tashqarisida ta'riflangan bo’lsa ularni inline funktsiya sifatida qarash uchun funktsiya ta'rifida inline so’zi aniq ko’rsatilgan bo’lishi kerak:Struktura kompleks ob'ektlari uchun umumiy bo’lgan elementlar statik elementlar deb ataladi. Yangi ob'ektlar yaratilganda statik elementlarga murojat qilish uchun oldin inizializatsiya qilinishi lozim. Inizializatsiya qo’yidagicha amalga oshiriladi:
Struktura-nomi:: kompleks-nomi initsializator
Misol uchun skladdagi tovarni kompleks tasvirlovchi strukturani kurib chiqamiz. Bu struktura komponentalari qo’yidagilardan iborat:
-Tovar nomi;
-Olish narxi;
-Qo’shimcha narx foiz ko’rinishida; tenglikka olib keladi, chunki len kompanentasi private atributiga egadir. Struktura kompanentasiga ko’rsatkichni funktsiyalarni chaqirishda haqiqiy parametr shartida ishlatish mumkin. Buning uchun bu parametrlari qo’yidagiga murojaat qilish lozim. Ob'ekt-nomi.* kompanenta-ma'lumotga-ko’rsatkich
Ob'ekt-nomi.* metodga-ko’rsatkich (parametrlar)
Misol uchun complek strukturai ob'ektlariga ko’rsatkich kiritamiz;
Complex 1 CM(10.2,-6.4);
Complex 1 * PCOM1=& CM;
Stroka strukturai clarr hizmatchi so’zi yordamida kiritilgani uchun char * ch va int len kompanentalariga to’g’ridan to’g’ri murojaat qilib bo’lmaydi. Satr uzunligini aniqlash uchun len-str ( ) kompanenta funktsiyasiga murojaat qilish lozimdir. Konkret ob'ektga tegishli satrga ko’rsatkichni string ( ) funktsiyasi qaytaradi. Strukturaning kerakli konstruktori mavjud bo’lib qo’shimcha yuklangan funktsiyalardir. Har bir konstruktor bajarilganda dinamik hotira ajratiladi. Struktura destruktori ~stroka ( ) bu hotirani ozod qiladi. in+N parametrlari konstruktor chaqirilganda N+1 elementli massiv bo’sh qoladi,
Satr uzunligi bo’lsa 0 ga teng bo’ladi.
Char * orch parametrli konstruktor chaqirilganda, massiv uzunligi va ---
C ++ tilining ajoyib xususiyatlaridan biri standart amallarni yangi ma'lumotlar turlariga kullash imkoniyatidir. Masalan satrlani ulashni S1=S2 kurinishda belgilash ancha ulaydir. Bu amalni simvolli massivlarga yoki satrli konstantalarga qo’llashning iloji yo’q. Lekin S1 va S2 ni biror struktura ob'ektlari sifatida (masalan Stroka struktura) tavsiflansab ular uchun amalini kiritish mumkin bo’ladi. Amalni ma'lumotlarning yangi tipiga qo’llash uchun dasturchi “ operatsiya – funktsiya “ deb ataluvchi mahsus funktsiyani kiritishi lozim. Bu usulda ta'riflangan operatsiya qo’shimcha yuklangan (inglizchasiga-overload) deb ataladi. Agar T struktura uchun yuqorida keltirilgan turdagi funktsiya e'lon qilingan bo’lsa, A*V ifoda operator (A,V) sifatida qaraladi. Struktura ob'ektlariga funktsiyaoperatorni qo’llash uchun operatsiya-funktsiya yoki struktura kompanenta funktsiyasi yoki do’stona funktsiya bo’lishi, eki parametrlardan birortasi struktura tipiga ega bo’lishi kerak. Qo’yidagi misolda amalini satrlarga qo’llash usuli kursatilgan. Buning uchun len – satr uzunligi , ch-simvolli massivga ko’rsatkich parametrlardan iborat. Streko strukturaidan foydalanamiz. Bu strukturada ikki konstruktor mavjuddir. Birinchisi yaratilaetgan ob'ekt uchun hotiradan satr sifatida joy ajratadi. Ikkinchisi haqiqiy parametr asosida ob'ekt yaratadi. Strukturadan tashkarida operatsiya-funktsiyani qo’yidagicha S bilan aniqlaymiz:
Strka & operator + (stroka & A, stroka & B),
Bu operatsiya-funktsiya ‘+’ amalini stroka strukturaiga tegishli ob'ektlarga qo’llash uchun ishlatiladi. Funktsiya operatsiya tanasi asosiy dasturdan keyin keltirilgan, shuning uchun asosiy dasturda bu funktsiyaning prototipi joylashtirilgan.
# include “ stroka. Spp “ stroka & operator + (stroka & A, stroka & B); void main (void)
{ stroka X (“qui”); stroka Y (“vivra”); stroka J (“verra”); stroka C;
while c=x+Y+J+”-Tirik bulsak, ko’ramiz”.; c. di 1 play ( );} do stroka 2 operator + (stroka &, stroka & b) { int ii=a. len-str ( ) + b.len-str ( ); stroka * ps;
ps=new stroka (ii); strcpy (ps-string ( ), a.string ( ) ); strcut (ps-string ( ),b.string ( ) ); ps-len_str ( )=ii; return * ps;}
Dastur bajarilishi natijasi:
Satr uzunligi 36
Satr mazmuni: Qui Vivra Verra –Tirik bo’lsak quramiz!
Dasturda satrlar uchun kiritilgan ‘+’ amali bitta ifodada uch marta qo’llanadi:
X+Y+J f”-Tirik bo’lsak qo’ramiz!”
Bunday qisqa murojatdan tashqari to’la operatsiya funktsiyani chiqarish mumkin:
C= operator t ( X,Y );
C= operator t ( C,J );
C= operator t ( C,” Tirik bo’lsak, quramiz!” )
Ikkinchi imkoniyat struktura kompanenta funktsiyalardan foydalanishdir. Har qanday biror amal strukturaga tegishli statik kompanenta operatsiya-funktsiya yordamida qayta yuklanishi mumkin. Bu holda bitta parametrga ega bo’lib, sarlavhasi qo’yidagi ko’rinishda bo’ladi:
T operator & (T.X)
Bu erda T-struktura, &-operatsiya.
Bu holda A&V ifoda A. Operator & (B) murojaat sifatida talqin yotiladi.
Kerak bo’lganda this ko’rsatkichi orqali murojat qilish mumkin. Misol tariqasida
‘t’ amalini point strukturai bilan ta'riflanuvchi displeydagi nuqtalarga qullaymiz.
Soddalashtirish uchun point strukturaida eng kerakli kompanentalarni qoldiramiz.
# include < graphic1. h > cla11 point1 protected: int x,y; public:
point1 (int xi=0, int yi=0)
{ x=xi; y=yi; } void show (void) { putpinel (x,y,get color ( ) );}; point1 operator+ (point2 p);}; point1 point1 : : operator + (point &p)
{ point1: d;
d.x=thi1-x+p.x;
Dastur bajarilishi natijasida display ekraniga ketma-ket qo’yidagi nuqtalar qo’yiladi: A(200,50); B(0,0); D(50,120); B(250,70), B(450,220)
Operatsiya funktsiyani oddiy struktura komponenta funktsiyasi sifatida chaqirish mumkin:
Point1 * ptr=& A;
B=ptr – operator + (D);
Biz struktura amalini global operatsiya-funktsiya va kompanenta operatsiyafunktsiya yordamida qayta yuklashni ko’rib chiqdik. Endi unar amalni struktura do’stona funktsiyasi yordamida qayta yuklashni ko’rib chiqamiz. “N ulchovli fazo radius-vektori “ strukturaini kiritamiz va bu struktura uchun ‘-‘-unar operatsiya funktsiyani kiritamiz. Bu operatsiya vektor yunalishini teskarisiga o’zgartiradi.
Har qanday amal '$' struktura ob'ektlari uchun ikki usulda aniqlanadi yoki parametrsiz komponenta funktsiya yoki bir parametrli (balkim do’stona) global funktsiya. Prefiks amal uchun xz ifoda , postfiks amal uchun Z ifoda komponenta funktsiya z.operator
*( ) yoki global funktsiya operator*(z) chaqirilishini bildiradi. C++ tilida ba'zi amallarni boshqa amallarning kombinatsiyasi sifatida aniqlanadi.
Misol uchun j+m butun son uchun m+=1ni bu amal bo’lsa m=m+1 ni bildiradi.
Bunday avtomatik almashtirishlar qo’shimcha yuklangan amallar uchun bajarilmaydi. Misol uchun umumiy holda operator*=() ta'rifni operator*( ) ta'rif va operator=( ) ta'rifdan keltirib chiqarib bo’lmaydi.
Agar ifodada foydalanuvchi kiritgan struktura ob'ekti qatnashmasa uning ma'nosini o’zgartirib bo’lmaydi. Misol uchun faqat ko’rsatkichlarga ta'sir qiluvchi amallarni kiritish mumkin emas.
Agar operatsiya funktsiyaning birinchi parametri standart tip bo’lishi kerak bo’lsa, bunday operatsiya-funktsiya kompanenta-funktsiya bulolmaydi. Misol uchun aa- biror struktura ob'ekti bo’lsin va uning uchun '+' amali qo’llangan bo’lsin. AA+2 ifoda uchun yoki AA.operator(2) yoki operator+(AA,2) ifoda chaqirilishi mumkin. 2++AA ifoda uchun operator+(AA,2) chaqirilishi mumkin lekin z. operator+(AA) hatoga olib keladi. Amallar kengaytirilganda ular uchun har hil tiplar qolib inatsiyasini oldindan nazarda tutish lozim. Lekin operatsiya-funktsiyalarga murojaat qilinganda standart tiplar almashinuvchi qoidalari ishlatiladi, shuning uchun tiplarning hamma kombinatsiyalarini hisobga olish zarurati yuq. Kupgina hollarda binar amallar uchun qo’yidagi hollarni hisobga olish etarlidir.
# standart tip, cinf
# struktura, standart tip
# struktura, struktura
Masalan: Somplex strukturai uchun qo’yidagi do’stona operatsiyafunktsiyalarni kiritish mumkin:
C++ kompilyatorida. C++ tilining eng birinchi varianti amalga oshirilgan shuning uchun bu kompilyator prefiks va postfiks shakllarni ajratmaydi:
C ++ tilining zamonaviy versiyalarida prefiks ++ va -- operatsiyalarni qo’shimcha yuklash boshqa operatsiyalarni yuklashdan farq qilmaydi, Postfiks shakldagi ++va -- amallarini qayta yuklaganda yana bir int tipidagi parametr kiritilishi kerak.Agar qo’shimcha yuklash uchun global funktsiya ishlatilsa uning birinchi parametri shif tipiga, ikkkinchi parametri int tipiga ega bo’lishi kerak.
Dasturda postfiks ifoda ishlatilganda butun parametr ham qiymatga ega bo’ladi ;
Misollarda prefiks qiymatni 10 marta oshirishni postfiks bo’lsa 2 marta oshirishni bildiradi. Prefiks qiymatni 10 marta kamaytirish, postfiks bo’lsa qiymatni 20 marta kamaytirishni bildiradi.
Blok deb funktsiya tanasi eki figurali qavslar ichiga olingan ta'riflar va operatorlar ketma ketlishgiga aytiladi.Misollarda K o’zgaruvchi faqat bir marta initsializatsiya qilinadi va uning qiymati navbatdagi murojaatgacha saqlanadi.Agar bir strukturadan ikkinchisini hosil qilinsa asosiy va hosilaviy strukturalarda elementlar nomlari bir hil bo’lishi mumkin. Bu holda 'hosilaviy struktura ichidagi funktsiyalarda hosilaviy struktura elementaridan foydalaniladi. Misol uchun book i library_card strukturalari price elementlaridan foydalansin. Agar aniq ko’rsatilmagan bo’lsa library_card chstrukturai funktsiyalari shu strukturaning price elementidan foydalanadi. Agar library_card strukturai funktsiyalaori book strukturai price elementiga murojaat qilishi lozim bo’lsa ruhsat operatoridan foydalanishi lozim, masalan book::price. Agar show_card funktsiyasi ikkala narhni ekranga chiqarishi lozim bo’lsa qo’yidagi operatorlardan foydalanishi lozim:
cout << "Kutubxona narxi: $" << price << endl; cout << "Sotuv narxi: $" << book::price << endl;
C++ tilida bir struktura uchun ajdod struktura o’z o’rnida boshqa strukturaning avlodi bo’lishi mumkin. Misol uchun somputer strukturai workstation strukturai uchun ajdod struktura bo’lsin:
class work_station : public computer { public:
work_station (char *operating_system, char *name, int hard_disk, float
floppy, char *screen, long colors, int x_res, int y_res,int processor, int speed, int RAM); void show_work_station(void); private:
char operating_system[64];};
Bu misolda workstation strukturai konstruktori computer strukturaining konstruktorini chaqiradi u bo’lsa somruter_screen va mother_board strukturai konstruktorlarini chaqiradi:
work_station::work_station( char *operating_system, char *name, int
hard_disk, float floppy, char *screen, long colors, int x_res, int y_res, int processor, int speed, int RAM) : computer (name, hard_disk, floppy, screen, colors, x_res, y_res, processor, speed, RAM)
{ strcpy(work_station::operating_system, operating_system);}
Bu misolda computer strukturai asosiy strukturadir. Lekin computer strukturai computer_screen va mother_board strukturalarining avlodidir. Natijada work_station strukturai hama uch struktura harakteristikalarini merosga oladi.
XULOSA
Xulosa qilib aytganda, C++ dasturlash tili va unda o`zgarmaslar, o`zgaruvchilar toifalari, hamda ifodalar va operatorlar bilan ishlash xaqida umumiy ma’lumotlarga ega bo`ldim. Borland C++ Builder - Windows muhitida ishlaydigan dastur tuzish uchun qulay bo`lgan vosita bo`lib, komp’yuterda dastur yaratish ishlarini avtomatlashtiradi, xatoliklarni kamaytiradi va dastur tuzuvchi mehnatini engillashtiradi. Borland C++ dastur zamonaviy vizual loyihalash texnologiyasi asosida ob`ektga yo`naltirilgan dasturlash nazariyasini hisobga olgan holda tuziladi.
Borland C++ Builder 6 sistemasi C++ tilining rivoji bo`lgan ob`ektga yo`naltirilgan Object C/C# dasturlash tillarini ishlatadi. Borland C++ Builder sistemasi dasturni loyihalash va yaratish vaqtini kamaytiradi, hamda Windows muhitida ishlovchi dastur ilovalarini tuzish jarayonini osonlashiradi.
Men C++ dasturi strukturasi xaqida, belgilar bayoni, algoritm va dastur tushunchasi, ma’lumotlarni kiritish va chikarish operatorlari xamda dasturda ishlatiladigan toifalar, ifodalar va operatorlar hamda sinflar va funksiya bilan ishlash xaqida bilim va kunikmalarga ega bo`ldim.
Do'stlaringiz bilan baham: |