bool operator = (const type_info &ob);
bool operator !=(const type_info &ob);
bool before(const type_info &ob);
const char *name();
Qayta yuklangan solishtirish operatorlar "= = "va"!= "turlarini solishtirish uchun ishlatiladi. typeid operatoridan foydalanishning oddiy misolini ko'rib chiqamiz:
// typeid operatoridan foydalanish misoli.
#include
#include
using namespace std;
class myclass {
// . . .
};
int main()
{
int i, j;
float f;
myclass ob;
cout << " Argumentlar turi i:"<< typeid(i).name();
cout << endl;
cout < < " Argumentlar turi f:" << typeid(f).name();
cout << endl;
cout < < " Argumentlar turi ob:" << typeid(ob).name();
cout << "\n\n";
if(typeid(i) == typeid(j))
cout <<”\n i va j o'zgaruvchilari bir xil."<
if(typeid(i) != typeid(f))
cout <”\n i va f o'zgaruvchilari turlari bir xil emas.";
return 0;
}
Ushbu dasturni amalga oshirishda bunday natijalar olingan.
Argumentlar turi i: int
Argumentlar turi f: float
Argumentlar turi ob: sinf sinf sinf sinf
i va j o'zgaruvchilari bir xil.
i va f o'zgaruvchilari turlari bir xil emas.
typeid operatorini ko’proq merosxo’r sinflar bilan, poliform, virtual va shablon fynktsiyalar bilan ish yuritishni ko’rsatkichlar yoki havolalar orqali tashkil qilganda ishlatish bit muncha qulaylik yararadi. Ya’ni typeid orqali ko’rsatkich ko’rsatayotgan real ob’ektning turini aniqlab olishimis mumkin.
Keyingi misolda odin standart tipga ega bo’lgan o’zgaruvchini tipini aniqlaymiz, keyin asos sinf va meros simf ob’ektlariga ko’rsatayotgan k’rsatkich orqali ob’ektlarni tipini aniqlaymiz.
/ * typeid operatorini polimorf sinflarning ierarxiyasiga qo'llash misoli.*/
#include
#include
using namespace std;
class Base {
virtual void f () {}; / / base sinfini polimorf qilish
// . . .
};
class Derived1: public Base {
// . . .
};
class Derived2: public Base {
// ...
};
int main(){
Base *p, baseob;
Derived1 ob1;
Derived2 ob2;
p= &baseob;
cout < "\n Ob`ekt tipi - ";
cout << typeid(*p).name() << endl;
p = &ob1;
cout < "\n Ob`ekt tipi - ";
cout << typeid(*p).name() << endl;
p = &ob2;
cout < "\n Ob`ekt tipi - ";
cout << typeid(*p).name() << endl;
return 0;}
Ushbu dasturning natijalari quyidagicha:
Ob`ekt tipi - Base
Ob`ekt tipi - Derived1
Ob`ekt tipi - Derived2
Quyida berilgan misolda typeid() operatori yordamida whattype() funktsiyasiya parametri sifatida qaysi sinfga mansub ob’ekt uzatlganini (foyadalanuvchi tipini) real vaqtda aniqlab, ekranga chop etamiz:
/ *
typeid operatorini mos yozuvlar parametriga qo'llash.*/
#include
#include
using namespace std;
class Base {
virtual void f () {}; / / base sinfini polimorf qilish
// . . .
};
class Derived1: public Base {
// . . .
};
class Derived2: public Base {
// . . .
};
/ * Biz typeid() operatordan foydalanishni namoyish qilamiz*/
void WhatType(Base &ob)
{
cout <”\n ob parametrining tipi - ";
cout << typeid(ob).name() << endl;
}
int main()
{
int i;
Base baseob;
Derived1 obi;
Derived2 ob2;
WhatType(baseob);
WhatType(ob1);
WhatType(ob2);
return 0;
}
Ushbu dastur bunday natijalarni ishlab chiqaradi.
ob parametrining tipi – Base
ob parametrining tipi - Derived1
ob parametrining tipi – Derived2
Operator typeid qo'llash yana bir turi bor, argument sifatida o’zgaruvchi nomini o’rniga C++ tilinig acosiy turlaridan birinig nomi ko’rsatiladi. Uning formati shunday.
Do'stlaringiz bilan baham: |