Klasslardi qollaw. Dostana ha’m virtual funkciyalar Qoyilg’an ma’sele
Download 93.86 Kb.
|
2-lekciya
Doslar sanin shegaralaw
C++ tilinde dostana klasstin’ ha’mme funkciyalari balkim bazi funkciyalarina menshik elementine murajat etiw huqiqin beriw mu’mkin. Misal ushin librarian klasinin’ change_catalog ha’m get_catalog funkciyalarina book klasinin’ menshik elementine mu’rajat qiliw imkanin beriw lazim bolsin. Bul jag’dayda book klasinda bul huqiqti to’mendegishe ko’rsetiw mu’mkin: class book { public: book(char *, char *, char *); void show_book(void); friend char *librarian::get_catalog(book); friend void librarian: :change_catalog( book *, char *); private: char title[64]; char author[ 64 ]; char catalog[64]; }; Bul misaldan korinip turipti friend operatorlari dostana funktsiyalardin’ Toliq prototiplerine iye boladi. Dostana funkciyalar. Eger dastu’rde bir klastan ekinshi klasg’a mu’rajat qiliw mu’mkin bolsa ha’m klass tariypleri tartibi qate keltirilgen bolsa sintaksis qate kelip shig’adi. Misalda book klasi librarian klasinda aniqlang’an funkciyalar prototiplerinen paydalaniladi. Sonin ushin librarian klasi tariypi book klasi tariypinen aldin keliwi kerek. Biraq librarian klasi analiz qilinsa ol book klasina murajar qiliniwin aniqlaw mu’mkin: class librarian { public: void change_catalog(book *, char *); char *get_catalog(book); }; Dastu’rde book klasi tariypin librarian klasi tariypinen aldin qoyiw mu’mkin bolmag’ani ushin, C++ aldin book klasin jariyalap keyin tariyplew imkanin beredi. To’mende qanday amelge asiriliwi ko’rsetilgen. class book; // To’mendegi LIMITFRI.CPP dastu’rde dostana funkciyalardan paydalanilg’an. Klaslar tariypi ta’rtibine itibar berin’: #include #include class book; class librarian { public: void change_catalog(book *, char *); char *get_catalog(book); }; class book { public: book(char *, char *, char *) ; void show_book (void); friend char *librarian::get_catalog(book); friend void librarian::change_catalog( book *, char *); private: char title[64]; char author[64]; char catalog[64]; }; book::book(char *title, char *author, char *catalog) { strcpy(book::title, title); strcpy(book::author, author); strcpy(book::catalog, catalog); } void book::show_book(void) { cout << "Nazvanie: " << title << endl; cout << "Avtor: " << author << endl; cout << "Katalog: " << catalog << endl; } void librarian::change_catalog(book *this_book, char *new_catalog) { strcpy(this_book->catalog, new_catalog) ; } char *librarian::get_catalog(book this_book) { static char catalog[64]; strcpy(catalog, this_book.catalog); return(catalog) ; } void main(void) { book programming( "Uchimsya programmirovat' na C++", "Jamsa", "P101"); librarian library; programming.show_book(); library.change_catalog(&programming, "Legkiy C++ 101"); programming.show_book(); } Dastu’rde book klasi bar ekenligi jariyalanadi. Sonin’ ushin librarian klasi ele tariyplenbegen klasg’a mu’rajat qiliwi mu’mkin. C++ tilinin’ ajayip hususiyatlarinan biri standart amellerdi jan’a mag’liwmatlar tu’rlerine qollaw imkaniyati esaplanadi. Maselen qatarlardi jalg’awdi S1=S2 ko’rinisinde belgilew bir qansha qolay. Bul ameldi simvolli massivlerge yaki qatarli konstantalarg’a qollaniwdin’ ilaji joq. Biraq S1 ha’m S2 ni qandayda bir klass obiektleri spatinda (ma’selen Stroka klass) tavsiflansa bular ushin amelin kiritiw mu’mkin boladi. Ameldi mag’liwmatlardin’ jan’a tipine qollaw ushin dastu’rshi- operaciya- funkciya- dep ataliwshi arnawli funkciyani kiritiw lazim. Operaciya- funkciya tariypi to’mendegishe. Qaytariliwshi_mag’liwmat_tin operator operaciya_belgisi (operaciya- funkciya-parametrleri- spetsifikatsiyasi) { operatsiya-funkciya-denesi-operatorlari } Kerek bolg’anda bul funkciya operator prototipin kiritiw mu’mkin. Qaytariliwshi-mag’liwmat-tipi+operator operaciya-belgisi { operatsiya-funktsiya-parametrleri-spetsifikatsiyasi ) Misal ushin * ameldi qandayda bir T klasina tiyisli obiektlerge qollaw ushin to’mendegishe funkciya jariyalaw mu’mkin: T operator * ( Tx,Ty ) Bul usulda ta'riyplengen operatsiya qosimsha tamamlang’an (inglizshesine-overload) dep ataladi. Eger T klasi ushin joqarida keltirilgen tu’rdegi funkciya jariyalang’an bolsa, A*V ifoda operator (A,V) spatinda qaraladi. Klass obiektlerine funkciya-operatorin qollaw ushin operaciya funkciya yaki klass komponenta funkciyasi yaki dostana funkciya boliwi, eki parametrlerden birewi klass tipine iye boliwi kerek. To’mendegi misalda ameldi qatarlarg’a qollaw usili ko’rsetilgen. Bunin’ ushin len-qatar uzinlig’i, ch-simvoli massivge ko’rsetkish parametrlerden ibarat. Streko klasinan paydalanamiz. Bul klasta eki konstruktor bar. Birinshisi jaratqan obiekt ushin yad qatar spatinda orin ajiratadi. Ekinshiden haqiqiy parametr tiykarinda obiekt jaratiladi. Klastan tisqari operaciya-funkciyani to’mendegishe S penen aniqlaymiz. Strka & operator + (stroka & A, stroka & B). Bul operaciya-funkciya ‗+‘ amelin sroka klasina tiyisli obiektlerge qollaw ushin isletiledi. Funkciya operaciya denesi tiykarg’i dastu’rden keyin keltirilgen, sonin’ ushin tiykarg’i dastu’rde bul funkciyanin’ prototipi jaylastirilg’an. # include ― stroka. Spp ― stroka & operator + (stroka & A, stroka & B); void main (void) { stroka X (―qui‖); stroka Y (―vivra‖); stroka J stroka J (―verra‖); stroka C; c=x+Y+J+‖-Tirik bulsak, ko‘ramiz‖.; c. di 1 play ( ); } 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; } Dastu’r orinlaniwi natiyjesi: Qatar uzunlig’i 36 Qatar mazmuni: Qui Vivra Verra –Tirik bo‘lsak quramiz! Dastu’rde qatarlar ushin kiritilgen ‗+‘ ameldi bir ifodada u’sh ma’rte qollanadi: X+Y+J f‖-Tirik bo‘lsak qo‘ramiz!‖ Bunday qisqa mu’rajatdan tisqari toliq operaciya funkciyani shig’ariw mu’mkin: C= operator t ( X,Y ); C= operator t ( C,J ); C= operator t ( C,‖ Tirik bo‘lsak, quramiz!‖ ) Download 93.86 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling