|
Tiplarni dinamik tarzda
|
bet | 4/131 | Sana | 16.06.2024 | Hajmi | 1,92 Mb. | | #264063 |
Bog'liq Tiplarni dinamik tarzda1.3-dastur. Typeid operatorini havolali parametriga qo‘llash.
#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 {
// ...
};
void WhatType(Base &ob){
cout << " ob parametri ob'ekt tipiga havolasi: "; cout << typeid(ob).name() << endl;
}
int main(){ Base baseob;
myClass_one ob1; myClass_two ob2; WhatType(baseob); WhatType(ob1); WhatType(ob2); system("pause"); return 0;
}
1.3 – dastur natijasi. Output
ob parametri ob'ekt tipiga havolasi: class Base
ob parametri ob'ekt tipiga havolasi: class myClass_one ob parametri ob'ekt tipiga havolasi: class myClass_two
1.3-dastur tahlili. Dasturda WhatType funksiyasi yaratilib, unga asos sinf tipidpgi havolali parametr belgilandi. Asosiy funksiyada 3 ta, base tipiga baseob, myClass_one tipiga ob1, myClass_two tipiga ob2 mos o‘zgaruvchilar yaratilgan. Dastur davomida WhatType funksiyasining havolali parametrga oddatiy o‘zgaruvchilar qiymat qilib berilgan. Natija shu maʻlum bo‘ldiki, dinamik o‘zgaruvchining tipi danamik ko‘rinishda o‘zgardi.
Dasturlash jarayonlarida o‘zgaruvchilarni tiplarini real tip bilan taqqoslashga to‘g‘ri keladi. Buning uchun typeid operatori agrgument sifatida tipi nomini olish yordamida amalga oshiriladi. Uning yozilishi quyidagicha:
-
Masalan, quyidagi listing amal qiladi.
-
Typeid operatorini ushbu variantda ishlatilishining maqsadi tipni taqqoslash uchun foydalanishdir, (belgilangan maʻlumotlar tipini taʻriflaydi) ammo, type_info obʻyektini olish uchun emas.
Dinamik tipni aniqlashni (RTTI) qo‘llash. Dasturda dinamik tipni aniqlash (identifikatsiya) vositasi (RTTI) imkoniyati va foydali bo‘lishi mumkinlingini ko‘rsatib o‘tamiz. Masalan, geometrik shakllar uchun iyerarxik sinf berilgan bo‘lsin, unda doira, uchburchak va to‘rtburchak maydoni hisoblash usullari mavjud. Ushbu dasturda doira, uchburchak yoki to‘rtburchakni yaratish uchun mo‘ljallangan funksiyasi factory() bo‘lsin. Ushbu funksiya yaratilgan obʻyektga bir nusxani qaytadi. Obʻyektlarni hosil qiluvchi funksiya baʻzan obʻyekt fabrikasi deb ataladi. Yaratilayotgan obʻyektning o‘ziga xos tipi C++ tasodifiy sonlar generatorining Rand() funksiyasiga kirish orqali aniqlanadi. Demak, qanday turdagi obʻyekt hosil bo‘lishini oldindan bilolmaymiz. 1.4-dasturda o‘nta obʻyekt yaratadi va har bir turdagi yaratilgan obʻyektlar sonini hisoblaydi. factory() funksiyasini chaqirishda har qanday shakl turini hosil qilish mumkinligi sababli, dastur aslida yaratilgan obʻyekt tipini aniqlash uchun typeid operatoridan foydalanadi.
|
| |