Xulosa. Dynamic cast nima uchun kerak ?
Download 48.58 Kb.
|
Dynamic cast
- Bu sahifa navigatsiya:
- include include class Parent { protected: int m_value; public: Parent(int value)
- Child::getName()
Reja : Dynamic_cast nima uchun kerak ? Dynamic_cast operatori . 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling