Xulosa. Dynamic cast nima uchun kerak ?


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


Reja :


  1. Dynamic_cast nima uchun kerak ?

  2. Dynamic_cast operatori .

  3. Xulosa .


Dynamic_cast nima uchun kerak ?
Polimorfizmni amalda qo'llashda siz ko'pincha ota-sinfga ko'rsatgichingiz bo'lgan holatlarga duch kelasiz, lekin siz faqat bolalar sinfidagi ma'lumotlarga kirishingiz kerak. Masalan:
#include
#include
class Parent {
protected:
int m_value;
public:
Parent(int value)
: m_value(value) {}
virtual ~Parent() {}
};
class Child: public Parent
{
protected:
std::string m_name;
public:
Child(int value, std::string name)
: Parent(value), m_name(name) {}
const std::string& getName() { return m_name;
}};
Parent* getObject(bool bReturnChild)
{
if (bReturnChild)
return new Child(1, "Banana");
else
return new Parent(2);
}

int main()
{
Parent *p = getObject(true);
delete p;
return 0;
}
Ushbu dasturda getObject() usuli har doim Parent sinfiga ko'rsatgichni qaytaradi, lekin bu ko'rsatkich ota-sinf ob'ektiga yoki Child sinfining ob'ektiga ishora qilishi mumkin. Ko'rsatkich Child sinfidagi ob'ektga ishora qilsa, Child::getName() qanday chaqiriladi?

Buning bir usuli - ota-klassga getName() virtual funksiyasini qo'shish (Ota-klass obyekti orqali bekor qilishni chaqirish uchun). Ammo bu variantdan foydalanib, biz Ota-onalar sinfini faqat Child sinfiga tegishli bo'lgan narsalar bilan aralashtirib yuboramiz.


C++ tili bizga Child sinf ko'rsatgichini Ota-sinf ko'rsatgichiga bilvosita aylantirish imkonini beradi (aslida getObject() shunday qiladi). Ushbu konvertatsiya asosiy turga (yoki "upcast") quyish deb ataladi. Biroq, agar biz Ota-ona sinf ko'rsatgichini Child sinf ko'rsatkichiga aylantira olsak nima bo'ladi? Shu tariqa biz Child::getName() ni xuddi shu ko‘rsatgich yordamida to‘g‘ridan-to‘g‘ri chaqirishimiz va virtual funksiyalar bilan umuman bezovta qilmasligimiz mumkin.




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