Tiplarni dinamik tarzda
Tipeid operatorini shablon sinflariga qo‘llash
Download 1.83 Mb.
|
Tiplarni dinamik tarzda
Tipeid 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 T a; public: myclass(T i) { a = i; } // . . . }; int main(){ myclass 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 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 protected: T x, y; public: figure(T i, T j) { x = i; y = j; } virtual T area() = 0; }; template class triangle : public figure triangle(T i, T j) : figure return x * 0.5 * y; } }; template class rectangle : public figure rectangle(T i, T j) : figure return x * y; } }; template class circle : public figure circle(T i, T j=0) : figure return 3.14 * x * x; } }; figure case 0: return new circle case 1: return new triangle } return 0; } int main(){ figure 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 } cout << endl; cout << "Obʻyektlarni sanash:\n"; cout << " uchburshaklar: " << t << endl; cout << " oʻrtburchaklar: " << r << endl; cout << " doiralar: " << c << endl; system("pause"); return 0; }
Dinamik tipni aniqlash har bir dasturda ishlatilmaydi. Ammo, dastur bajarilish vaqtida, polimorf turlari bilan ishlashda, undagi obʻyektlarning har qanday tipini aniqlashga imkonini beradi. Download 1.83 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling