Muhamma al-xorazmiy nomidagi toshkent axborot texnalogiyalari universiteti nurafshon filiali
Download 47.16 Kb.
|
nodir
- Bu sahifa navigatsiya:
- 1.1-dastur.
- 1.1-jadval.
- 1.2-dastur.
bool operator == (const type_info &ob); bool operator !=(const type_info &ob);
bool before(const type_info &ob); const char *name(); Bunda qayta aniqlangan (overloaded) operatorlari [==] va [!=] tiplarini taqqoslash uchun ishlatiladi. Chaqiruvchi obʻyekt parametr sifatida ishlatiladigan obʻyekt (element ob) oldida ketma-ketlik tartibida bo‘lsa before() funksiyasi true qaytaradi. Bu funksiya asosan ichki foydalanish uchun mo‘ljallangan. Uning natija qiymati merosxo‘r yoki sinf iyerarxik bilan hech qanday aloqasi yo‘q. name() funksiyasi tip nomiga ko‘rsatkich qaytadi. typeid operatoridan foydalanishga bir misol keltiramiz. 1.1-dastur. Tiplarni taqqoslash1 #include "stdafx.h" #include // . . . }; int main(){ int i, j; float f; myclass ob; cout << "i oʻzgaruvchi tipi: " << typeid(i).name()< cout << "ob oʻzgaruvchi tipi: " << typeid(ob).name()< cout << " i va j tiplar bir xil.\n"; if(typeid(i) != typeid(f)) cout << " i va f tiplar bir xil emas.\n"; system("PAUSE"); return 0;} 1.1 – dastur natijasi. Output i oʻzgaruvchi tipi: int f oʻzgaruvchi tipi: float ob oʻzgaruvchi tipi: class myclass i va j tiplar bir xil.i va f tiplar bir xil emas 1.1-dastur tahlili. Dasturda int tipiga oid i va j, float tipida f, myclass tipida ob o‘zgaruvchilari aniqlangan. typeinfo kutubxonasining typeid().name() metodi bilan ularning tiplari aniqlangan. Taqqsolash operatorlari bilan o‘zraguvchilarning 1 Дастур Visual C++ муҳитида тузилган. tiplari tekshirilgan va natijalar ekranga chiqarilgan. Bu esa tiplar bo‘yicha dastlabki ishlov berish uchun lozim. 1.1-jadval. Type_info sinf aʻzolari va vazifalari
Typeid operatori polimorf tayanch sinf uchun ko‘rsatkich sifatida qo‘llaniladigan bo‘lsa (eslabtib o‘tamiz, polimorf sinf kamida bitta virtual funksiyani o‘z ichiga olgan sinfga aytiladi), u avtomatik ravishda real obʻyekt tipini qaytaradi va u asossidan olingan sinf tayanch sinf obʻyekt yoki obʻyekt emasligini ham ko‘rsatadi. Shuning uchun typeid operatoridan asos sinfga ko‘rsatgich bilan murojaat qilingan obʻyekt tipini dinamik ravishda aniqlash uchun foydalanish mumkin. Bu xususiyat quyidagi dasturda ko‘rsatilgan. 1.2-dastur. Typeid operatorini polimorf sinflar ierarxiyasiga qo‘llanilishi. #include "stdafx.h" #include #include using namespace std; class Base { virtual void f() {}; // Asos sinf uchun polimorf // . . . }; class myClass_one: public Base { // . . . }; class myClass_two: public Base { // ... }; int main(){ Base *p, baseob; myClass_one ob1; myClass_two ob2; p = &baseob; cout << " O'zgaruvchi p tipdagi obyektga ishora: "; cout << typeid(*p).name() << endl; p = &ob1; cout << " O'zgaruvchi p tipdagi obyektga ishora: "; cout << typeid(*p).name() << endl; p = &ob2; cout << " O'zgaruvchi p tipdagi obyektga ishora: "; cout << typeid(*p).name() << endl; system("pause"); return 0;} 1.2 – dastur natijasi. Output O'zgaruvchi p tipdagi obyektga ishora: class Base O'zgaruvchi p tipdagi obyektga ishora: class myClass_one O'zgaruvchi p tipdagi obyektga ishora: class myClass_two 1.2-dastur tahlili. Dasturda dinamik ko‘rsatkichli Base tipli p o‘zgaruvchisi yaratilgan va 3 ta, base tipiga baseob, myClass_one tipiga ob1, myClass_two tipiga ob2 mos o‘zgaruvchilar yaratilgan. Dastur davomida dinamik o‘zgaruvchiga oddatiy o‘zgaruvchilar qiymat qilib berilgan. Natija shu maʻlum bo‘ldiki dinamik o‘zgaruvchining tipi danamik ko‘rinishda o‘zgardi. Typeid operatori polimorf turdagi tayanch sinfga ko‘rsatgich sifatida qo‘llanilsa, haqiqiy manzillangan obʻyektning tipini dastur bajarilayotgan vaqtda aniqlaydi. Typeid operatori polimorf bo‘lmagan iyerarxik sinflar uchun ko‘rsatkich qo‘llaniladigan barcha hollarda, tayanch tipi uchun ko‘rsatikich bo‘ladi. Boshqa so‘zlar bilan aytganda, bu ko‘rsatkich aslida tipni aniqlash mumkin emas. Tajriba sifatida 1.2-dasturdagi asos sinfdagi f() virtual funksiyani izohga oling va natijani tekshirib ko‘ring. Dasturda bu o‘zgarishni amalga oshirgandan so‘ng har bir turli tipli obʻyektning tipi base deb aniqlanishini ko‘rasiz, chunki bu p ko‘rsatgichga ega bo‘lgan tipdir. Typeid operatori odatda kengqirrali ko‘rsatkich (dereferenced pointer yaʻni, [*] operatoriga ega bo‘lgan ko‘rsatkich) uchun qo‘llanilganligi sababli, bu bu ko‘rsatkich null bo‘lib chiqqanda vaziyatni boshqarish uchun maxsus istisno yaratiladi. Bu holda, typeid operatori bad_typeid istisnoga o‘tadi. Polimorf sinflar ierarxiyasidagi obʻyektlarga havolalar ko‘rsatgichlar kabi ishlaydi. Typeid operatori polimorf sinfning mos yozuvlar uchun qo‘llaniladigan bo‘lsa, u aslida obʻyekt tipini qaytaradi va u asosiy tipi o‘rniga olingan tipdagi obʻyekt bo‘lishi mumkin. Bu usul o‘zgaruvchilarni funksiyalarga murojaat qilib o‘tishda eng ko‘p qo‘llaniladi. Masalan, quyidagi (1.3-dastur) dasturda WhatType() funksiyasi asosiy tipdagi obʻyektlarga mos yozuvlar parametrini eʻlon qiladi. Demak, WhatType() funksiyasi bazaviy turdagi obʻyektlarga murojaatlarni yoki asos sinfdan olingan har qanday sinf obʻyektlariga murojaatlarni keltirib chiqaradi. Bunday parametrlarga qo‘llaniladigan typeid operatori funksiyaga o‘tgan obʻyektning haqiqiy turini qaytaradi. Download 47.16 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling