Kitob uchta qismdan iborat. "Strukturali dasturlash", "Obyektli-yo’nalishli dasturlash", "Standart kutubxonalar"



Download 333,2 Kb.
bet87/90
Sana10.07.2022
Hajmi333,2 Kb.
#770437
1   ...   82   83   84   85   86   87   88   89   90
Bog'liq
C majmua

reinterpret_cast amali

reinterpret_cast amali bir-biri bog’lanmagan tiplarni, masalan, ko’rsatgichlarni butunlarga va aksincha void tipida ko’rsatgichlarni konkret tipga almashtirish uchun qo’llaniladi. Bunda ma’lumotlarni ichki tasviri o’zgarmay qoladi, faqat kompilyatorning ma’lumotlarga nuqtai nazari (qarashi) o’zgaradi.


Amal formati
reinterpret_cast (ifoda)
Amal natijasi murojaat, ko’rsatgich butun yoki haqiqiy tipdan iborat ko’rsatgich tipga ega.
Misol:
char *р = reinterpret_cast (malloc(100));
long l = reinterpret_cast (p);
static_cast va reinterpret_cast orasidagi farq kompilyatorga static_cast dan foydalanganda minimal tekshirishga, dasturchiga – reinterpret_cast yordamida xavfli almashtirish belgilashga imkon beradi. Almashtirish natijasi dasturchi vijdoniga havola.


Tipning dinamik ta’rifi

Tipni identifikatsiyalash mexanizmi dasturni bajarish vaqtida (RTTI) hozirgi paytda ko’rsatgich qanday tipga murojaat qilayotganini hamda obyektlar tiplarini taqqoslashga imkon beradi. RTTI ga kirish uchun til standartiga typeid va type_info sinfi kiritilgan.


typeid amali formati:
typeid (tip)
typeid (ifoda)
Amal parameter sifatida tip nomi yoki ifodani qabul qiladi va tip haqida ma’lumotni o’z ichiga olgan type_info sinf obyektga murojaatni qaytaradi. Agar amal operand tipini aniqlay olmasa bad_typeid favqulotda holat hosil bo’ladi. Operand polimorf tipga ko’rsatgich yoki murojaatdan iborat bo’lganda natija tip haqida dinamik ma’lumotdan iborat (ya’ni type_info obyekt berilgan paytda ko’rsatgich murojaat qilayotgan obyekt tipi haqida ma’lumotni o’z ichiga oladi).
Agar operand polimorf bo’lgan tipga ko’rsatgichdan iborat ifoda bo’lsa, type_info obyekt u murojaat qilayotgan obyekt tipi haqida emas, ifoda tipi haqidagi ma’lumotni o’z ichiga oladi.
typeid amali ham asosiy, ham hosila ma’lumotlar tiplari bilan ishlashi mumkin.
type_info sinfi sarlavha faylida quyidagicha tavsiflanadi:
class type_info{
public:
virtual ~type_info();
bool operator==(const type_info& rhs) const;
bool operator!=(const type_info& rhs) const;
bool before(const type_info& rhs) const;
const char* name() const;
private:
type_info(const type_info& rhs);
type_info& operator=(const type_info& rhs);
};
name usuli type_info tipidagi obyekt bilan tavsiflanadigan tip nomidan iborat satrga ko’rsatgichni qaytaradi.
Vertual destruktor type_info sinfni polimorf qiladi.
Nusxalash konstruktori va qiymat berish amali sinfning obyektlari tasodifan nusxalash va qiymat berish imkoniyatini bartaraf etish uchun private kabi e’lon qilingan.
== va != amallar ikkita obyektni tenglik va tengsizlikka taqqoslashga imkon beradi, before funksiya esa ikki tipdagi nomlarini xarfma-xarf taqqoslashni bajaradi. Taqqoslash uchun
typeid(T1).before(typeid(T2))
ko’rinishdagi konstruktor ishlatiladi.
Agar T1 tip nomi leksikografik T2 nomidan oldin kelsa, natija rost bo’ladi.
Dastur bajarish paytida obyekt tipi haqidagi aniq ma’lumot kerak bo’lishi mumkin, masalan, dasturchi biror kutubxona bazaviy sinf funksionalligini kengaytirganda, bazaviy sinfga virtual funksiyalarni qo’shish mumkin emas yoki ma’nosiz. Masalan:
#include
class В{
public: virtual ~В(){};
};
class С: public В{
public: virtual void some_method(){ ... };
};
void demo(B* р){
if (typeid(*p) == typeid(C))
dynamic_cast(p)->some_method();
}
int main(){
C* с = new C; demo(c);
return 0;
}
Tip haqida ma’lumotni diagnostik (tashhis) maqsadlarida foydalanish mumkin:
void print_type(some_obj *р){
cout << typeid(*p).name();
}
typeid amali vertual funksiya o’rniga va obyekt tipini kompilyatsiya bosqichida aniqlash mumkin bo’lgan hollarda qo’llanilishi mumkin emas.


Download 333,2 Kb.

Do'stlaringiz bilan baham:
1   ...   82   83   84   85   86   87   88   89   90




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