Muhamma al-xorazmiy nomidagi toshkent axborot texnalogiyalari universiteti nurafshon filiali


Download 47.16 Kb.
bet2/4
Sana13.04.2023
Hajmi47.16 Kb.
#1351119
1   2   3   4
Bog'liq
nodir

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 #include using namespace std; class myclass {
// . . .
};
int main(){ int i, j; float f; myclass ob;
cout << "i oʻzgaruvchi tipi: " << typeid(i).name()< << "f oʻzgaruvchi tipi: " << typeid(f).name()<
cout << "ob oʻzgaruvchi tipi: " << typeid(ob).name()<if(typeid(i) == typeid(j))
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



Funksiya
nomi

vazifasi

1

(constructor)

Sinfda standart va nusxa konstruktori mavjud emas.

2

(destructor)
[virtual]

xavfsiz tayanch sinf uchun pointer orqali obʻyektni o‘chirish
mumkin (virtual funksiyasi)

3

operator=

O‘zlashtirish amalidan foydalanib ko‘chirib bo‘lmaydi

4

operator==
operator!=

Obʻyektlar bir xil tipgaligini taqqoslashydi
(public funksiya)

5

before

Joriy tipdagi boshqa type_index obʻyekt tomonidan nusxasi tipini bor yoki yo‘qligini tekshiradi. Obʻyektlar, aniqrog‘i tiplari, amalga oshirilishi belgilangan tartibda tashkil etiladi.
(public funksiya)

6

hash_code

Joriy tipga mos keladigan tiplarni qaytaradi
(public funksiya)

7

name

Joriy tipning aniqlangan nomini qaytaradi.
(public funksiya)


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:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling