Tipeid operatorini shablon sinflariga qo‘llash

|
Tipeid operatorini shablon sinflariga qo‘llash
|
bet | 6/131 | Sana | 24.01.2024 | Hajmi | 1,92 Mb. | | #144844 |
Bog'liq Tiplarni dinamik tarzdaTipeid operatorini shablon sinflariga qo‘llash. Typeid operatorini shablon sinflariga ham qo‘llash mumkin albatta. Shablon sinfi asosida hosil bo‘lgan obʻyekt tipi obʻyektni amalga oshirishda uning umumlashgan maʻlumotlari uchun qanday maʻlumotlardan foydalanilganligi asosida qisman aniqlanadi. Shuning uchun, turli maʻlumotlar yordamida yaratilgan bir xil shablon sinfga tegishli bo‘lgan ikki obʻyektlar tip xil bo‘ladi.
1.5-dastur. shablon sinflari bilan typeid operatoridan foydalanish.
#include "stdafx.h"
#include
#include
using namespace std;
template class myclass {
T a; public:
myclass(T i) { a = i; }
// . . .
};
int main(){
myclass o1(28), o2(1); myclass o3(19.80); cout << " o1 obʻyekt tipi: ";
cout << typeid(o1).name() << endl; cout << " o2 obʻyekt tipi: ";
cout << typeid(o2).name() << endl; cout << " o3 obʻyekt tipi: ";
cout << typeid(o3).name() << endl; cout << endl;
if(typeid(o1) == typeid(o2))
cout << " o1 va o2 obʻyektlar bir xil tip.\n"; if(typeid(o1) == typeid(o3)) cout << "Xatolik\n";
else cout << "o1 va o3 obʻyektlar bir xil tip emas.\n"; system("pause");
return 0;
}
1.5 – dastur natijasi. Output
o1 obʻyekt tipi: class myclass
o2 obʻyekt tipi: class myclass
o3 obʻyekt tipi: class myclass
o1 va o2 obʻyektlar bir xil tip.
o1 va o3 obʻyektlar bir xil tip emas.
1.5-dasturdan ko‘rinib turibdiki, ikki obʻyektlar bir xil shablon sinf obʻyektlarida bo‘lsa-da, ularning parametrli maʻlumotlar mos bo‘lmasa, ular turi teng emas. Bu dasturda o1 obʻyekti myclass tipida, o3 obʻyekti esa myclass
tipida bo‘ladi. Shunday qilib, bu obʻyektlar turli xilligini ko‘rsatadi.
Tipeid operatorini shablon sinflariga qo‘llashning yana bir misolini, yaʻni 1.4-dastur geometrik shaklni aniqlash dasturining o‘zgartirilgan variantini ko‘rib chiqamiz. Bu safar figure sinfini shablon sinfiga aylantiriladi.
1.6-dastur. Figure ierarxiyasining shablon varianti.
#include "stdafx.h"
#include
#include
#include
using namespace std;
template class figure{
protected:
T x, y; public:
figure(T i, T j) { x = i;
y = j;
}
virtual T area() = 0;
};
template
class triangle : public figure{ public:
triangle(T i, T j) : figure(i, j) {} T area() {
return x * 0.5 * y;
}
};
template
class rectangle : public figure{ public:
rectangle(T i, T j) : figure(i, j) {} T area() {
return x * y;
}
};
template
class circle : public figure{ public:
circle(T i, T j=0) : figure(i, j) {} T area() {
return 3.14 * x * x;
}
};
figure *generator(){ switch(rand() % 3 ) {
case 0: return new circle (rand() % 28);
case 1: return new triangle(rand() % 28, rand() % 28); case 2: return new rectangle (rand() % 28, rand() % 28);
}
return 0;
}
int main(){
figure *p; int i;
int t=0, c=0, r=0; for(i=0; i<15; i++) {
p = generator();
cout << "Obʻyekt tipi: " << typeid(*p).name(); cout << ". ";
if(typeid(*p) == typeid(triangle)) t++; if(typeid(*p) == typeid(rectangle)) r++; if(typeid(*p) == typeid(circle)) c++; cout << " S= " << p->area() << endl;
}
cout << endl;
cout << "Obʻyektlarni sanash:\n";
cout << " uchburshaklar: " << t << endl; cout << " oʻrtburchaklar: " << r << endl; cout << " doiralar: " << c << endl;
system("pause");
return 0;
}
1.6 – dastur natijasi. Output
|
Obʻyekt tipi: class rectangle. S= 90 Obʻyekt tipi: class triangle. S= 136 Obʻyekt tipi: class circle. S= 615.44 Obʻyekt tipi: class triangle. S= 210 Obʻyekt tipi: class rectangle. S= 351 Obʻyekt tipi: class triangle. S= 202.5 Obʻyekt tipi: class rectangle. S= 44 Obʻyekt tipi: class circle. S= 803.84 Obʻyekt tipi: class rectangle. S= 156 Obʻyekt tipi: class triangle. S= 30 Obʻyekt tipi: class rectangle. S= 225 Obʻyekt tipi: class circle. S= 706.5 Obʻyekt tipi: class circle. S= 1384.74 Obʻyekt tipi: class triangle. S= 66.5 Obʻyekt tipi: class triangle. S= 15
Obʻyektlarni sanash: uchburshaklar: 6
oʻrtburchaklar: 5
doiralar: 4
|
Dinamik tipni aniqlash har bir dasturda ishlatilmaydi. Ammo, dastur bajarilish vaqtida, polimorf turlari bilan ishlashda, undagi obʻyektlarning har qanday tipini aniqlashga imkonini beradi.
|
| |