1-ma’ruza. Noma'lum nomlarning noma'lum turlari va maydoni Ma’ruza rejasi



Download 63,61 Kb.
bet4/14
Sana31.12.2021
Hajmi63,61 Kb.
#242065
1   2   3   4   5   6   7   8   9   ...   14
Bog'liq
1-mavzu

typeid (tur nomi)

Misol uchun, quyidagi ko'rsatmalar mutlaqo joizdir.

cout << typeid(int).name();

typeid operatorining ushbu versiyasining maqsadi tipe_info (berilgan ma'lumot turini tavsiflaydigan) kabi ob'ektni olishdir, shuning uchun u turlarni taqqoslash yo'riqnomasida ishlatilishi mumkin.


RTTI dasturining namunasi
Quyidagi dastur dinamik turlarni aniqlash vositasi (RTTI) qanchalik foydali bo'lishi mumkinligini ko'rsatadi. Bu erda 15 bobidan geometrik shakllar sinflarining ierarxiyasining o'zgartirilgan versiyasi qo'llaniladi, bu doira, uchburchak va to'rtburchakning maydonini hisoblab chiqadi. Ushbu dastur bir doira, uchburchak yoki to'rtburchak namunasini yaratish uchun mo'ljallangan, fadtoru () funktsiyasini aniqlaydi. Bu funktsiya yaratilgan ob'ektga bir namoyishchi qaytaradi. (Ob'ektlarni ishlab chiqaradigan funktsiya ba'zan zavod zavodi deb ataladi.) Yaratilgan ob'ektning o'ziga xos turi rand () C ++ tasodifiy sonlar generatorining funktsiyasiga murojaat qilish natijasida aniqlanadi. Shunday qilib, qaysi turdagi ob'ekt ishlab chiqarilishini oldindan bilmaymiz. Dastur o'nta ob'ektni yaratadi va har bir turdagi yaratilgan raqamlar sonini hisoblab chiqadi. Fastor() funktsiyasini chaqirganda, har qanday turdagi raqam hosil bo'lishi mumkin, chunki dasturda haqiqiy yaratilgan ob'ektning turini aniqlash uchun typeid operatori ishlatiladi.
/ * Dinamik turdagi identifikatsiyalash vositasidan foydalanishni namoyish qilish.*/
#include

#include


using namespace std;
class figure {

protected:

double x, y;

public:


figure(double i, double j) {

x = i;


y = j;

}

virtual double area() = 0;



};
class triangle : public figure {

public:


riangle(double i, double j) : figure(i, j) {}

double area() {

return x * 0.5 * y;

}

};


class rectangle : public figure {

public:


rectangle(double i, double j) : figure (i, j) {}

double area() { return x * y;}

};
class circle : public figure {

public:


circle(double i, double j=0) : figure(i, j) {}

double area() {return 3.14 * x * x;}

};
figure *factory()

{

switch(rand() % 3 ) {



case 0: return new circle (10.0);

case 1: return new triangle (10.1, 5.3);

case 2: return new rectangle (4.3, 5.7);

}

return 0;



}
int main()

{

shakl * p; / / asosiy sinf uchun pointer



int i;

int t=0, r=0, c=0;

// ob'ektlarni yaratish va hisoblash

for(i=0; i<10; i++) {

p = standart (); / / ob'ektni yaratish

cout << "\n Ob'ekt sinfi " << typeid(*p).name();

cout << " turiga ega.  ";

// ushbu ob'ektni hisobga oling

if(typeid(*р) == typeid(triangle)) t++;

if(typeid(*p) == typeid(rectangle)) r++;

if(typeid(*p) == typeid(circle)) c++;

// shakl mayaydonini cop etamiz

cout << "Shakl maydoni = " << p->area() << endl;

}

cout << endl;



cout << " Bunday ob'ektlar yaratildi:\n";

cout << " Uchburchaklar: " << t << endl;

cout << " To’g’rito’rtburchaklar: " << r << endl;

cout << " Aylanalar: " << с << endl;

return 0;

}
Ushbu dasturni amalga oshirishning mumkin bo'lgan natijasi shunday.

Ob'ekt sinfi rectangle turiga ega. Shakl maydoni = 24.51

Ob'ekt sinfi rectangle turiga ega. Shakl maydoni = 24.51

Ob'ekt sinfi triangle turiga ega. Shakl maydoni =26.765
Ob'ekt sinfi triangle turiga ega. Shakl maydoni = 26.765

Ob'ekt sinfi rectangle turiga ega. Shakl maydoni = 24.51

Ob'ekt sinfi triangle turiga ega. Shakl maydoni =26.765

Ob'ekt sinfI circle turiga ega.  Shakl maydoni = 314

Ob'ekt sinfI circle turiga ega.  Shakl maydoni = 314

Ob'ekt sinfi triangle turiga ega. Shakl maydoni = 26.765

Ob'ekt sinfi rectangle turiga ega. Shakl maydoni = 24.51

Bunday ob'ektlar yaratildi:

Uchburchaklar: 4

To’g’rito’rtburchaklar: 4

Aylanalar:
Typeid operatorini shablon sinflariga qo'llash
Operator typeid shablon sinflariga ham qo'llanilishi mumkin. Ob'ekt turi, qaysi bir namuna Andoza sinf, qisman asosida aniqlanadi, ma'lumotlar ob'ekt amalga oshirishda uning umumlashtirilgan ma'lumotlar uchun ishlatiladi nima. Shunday qilib, turli xil ma'lumotlar yordamida yaratilgan bir xil shablon sinfining ikki nusxasi turli xil turlarga ega. Oddiy misolni ko'rib chiqaylik.
/ * Shablon sinflari bilan typeid operatoridan foydalanish.*/
#include
using namespace std;
template

class myclass {

T a;

public:


myclass(T i) { a = i; }

// . . .


};
int main()

{

myclass o1(10), o2(9);



myclass o3(7.2);

cout << "\n Ob`ekt o1 turi - ";

cout << typeid(o1).name() << endl;

cout << " Ob`ekt o1 turi - ";

cout << typeid(o2).name() << endl;

cout << " Ob`ekt o1 turi - ";

cout << typeid(o3).name() << endl;

cout << endl;

if(typeid(o1) == typeid(o2))

cout << " o1 va o2 ob`ektlar bir xil turga ega.\n";

if(typeid(o1) == typeid(o3)) cout << "Hato\n";

else cout << " o1 va o3 ob`ektlar turli xil.\n";

return 0;

}
Ushbu dastur bunday natijalarni ishlab chiqaradi.


o1 obyekti turi - myclass

o2 ob'ekti turi - myclass

o3 ob'ekti turi - myclass

o1 va o2 ob'ektlari bir xil turga ega.

o1 va o3 ob'ektlari turli xil.
Ko'rib turganingizdek, ikkala ob'ekt bir xil shablon sinfining namunalari bo'lsada, ularning parametrlangan ma'lumotlari mos kelmasa, ular bir turga teng deb hisoblanmaydi. Ushbu dasturda, o1 ob'ekt turi myclass < int>, va ob'ekt o3 turi myclass < — shunday qilib, ular turli xil turga eda bolgan ob1ektlardir.

Keling, typeid operatorini shablon sinflariga qo'llashning yana bir misolini ko'rib chiqaylik, ya'ni avvalgi bo'limdagi geometrik shakllarni aniqlash dasturining o'zgartirilgan versiyasi. Bu safar shakl sinfini shablonga aylantirdik.


// Shaklning shablon versiyasi-ierarxiya.
#include

#include
using namespace std;

template

class figure

{

protected:

T x, y;

public:

figure(T i, T j) {

x = i;

у = 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.
figure *generator()

{

switch(rand() % 3 ) {

case 0: return new circle (10.0);

case 1: return new triangle(10.1, 5.3);

case 2: return new rectangle (4.3, 5.7);

}

return 0;

}
int main()

{

figure *p;

int i;

int t=0, c=0, r=0;

// генерируем и подсчитываем объекты

for(i=0; i<10; i++) {

p = generator();

cout << "Ob`ekt tyri " << typeid(*p).name();

cout << ". ";

// учитываем объект

if(typeid(*p) == typeid(triangle)) t++;

if(typeid(*p) == typeid(rectangle)) r++;

if(typeid(*p) == typeid(circle)) c++;

cout << "Shakl maydoni " << p->area() << endl;

}

cout << endl;

cout << "Yaratilgan shakillar:\n";

cout << " Uchburchaklar: " << t << endl;

cout << " Tog’rito’rtburchaklar: " << r << endl;

cout << " Aylanalar: " << с << endl;

return 0;

}

Download 63,61 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   14




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish