Xulosa. Dynamic cast nima uchun kerak ?


Download 48.58 Kb.
bet4/7
Sana28.12.2022
Hajmi48.58 Kb.
#1011767
1   2   3   4   5   6   7
Bog'liq
Dynamic cast

Object^o2 = 10;
PrintObjectType(o1);
PrintObjectType(o2);
}

Ushbu ierarxiyada A virtual tayanch sinf mavjud. Sinf misoli E va pastki ob'ektga ko'rsatgich berilgan bo'lsa A, noaniqlik tufayli dynamic_cast a ko'rsatgich muvaffaqiyatsiz bo'ladi.  Avval to'liq ob'ektga qaytishingiz kerak E, so'ngra to'g'ri ob'ektga erishish uchun ierarxiya bo'ylab bir ma'noda orqaga qaytishingiz kerak B.
Quyidagi rasmda ko'rsatilgan sinf ierarxiyasini ko'rib chiqing.

Ikki nusxadagi asosiy sinflarni ko'rsatadigan sinf ierarxiyasi


Ob'ekt turi E va pastki ob'ektga ko'rsatgich berilgan holda, pastki ob'ektdan eng chap tomondagi pastki ob'ektga D o'tish uchun uchta konvertatsiya qilish mumkin. Siz ko'rsatgichdan ko'rsatkichga o'zgartirishni, so'ngra dan ga o'zgartirishni (yoki yashirin konvertatsiyani) va nihoyat dan ga o'zgartirishni amalga oshirishingiz mumkin .
Masalan: D A dynamic_cast D E dynamic_cast E B B A .
class A {virtual void f();};
class B : public A {virtual void f();};
class C : public A { };
class D {virtual void f();};
class E : public B, public C, public D {virtual void f();};

void f(D* pd) {
E* pe = dynamic_cast(pd);
B* pb = pe; // yuqoriga ko'tarilgan, yashirin konvertatsiya
A* pa = pb; // yuqoriga ko'tarilgan, yashirin konvertatsiya
}
Operatordan dynamic_cast "o'zaro to'qnashuv" ni bajarish uchun ham foydalanish mumkin. B Xuddi shu sinf ierarxiyasidan foydalanib, to'liq ob'ekt turi bo'lsa, ko'rsatgichni, masalan, pastki ob'ektdan pastki ob'ektga D o'tkazish mumkin E.
D O'zaro o'tishlarni hisobga olsak, ko'rsatgichdan ko'rsatkichga eng chap A pastki ob'ektga o'tkazishni faqat ikki bosqichda amalga oshirish mumkin . D dan ga o'zaro o'tishni , so'ngra dan ga B bilvosita aylantirishni amalga oshirishingiz mumkin . Masalan: B A

Download 48.58 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




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