Dynamic_Cast C ++

Dynamic Cast C



ستتم مناقشة التمثيل الديناميكي في لغة البرمجة C ++ في هذه المقالة. للبدء ، يجب أن نفهم فكرة اختيار الممثلين وأنواع عديدة من اختيار الممثلين. تُعرف عملية تغيير نوع بيانات المتغير باسم الصب. ينقسم Casting إلى فئتين في لغة البرمجة C ++: الصب الضمني والصرف الصريح.

تحويل نوع البيانات في C ++:

نوع الصب هو إجراء لتغيير نوع البيانات إلى نوع بيانات آخر. هناك نوعان من التحويل أو تحويل النوع في لغة البرمجة C ++: الصب الضمني والصريح. التحويل الآلي للكتابة هو اسم آخر للتلبيس الضمني. يتم تنفيذه بواسطة المترجم أثناء التجميع في الوقت الفعلي ولا يحتاج إلى أي إدخال أو إجراء من المستخدم. عندما يكون هناك نوعان من أنواع البيانات في التعبير ، يحدث هذا النوع من الإرسال. فمثلا:

  واجهة مستخدم رسومية ، نص ، وصف التطبيق يتم إنشاؤه تلقائيًا







في الكود المعطى ، يمكننا أن نرى أنه تم إدخال متغير عدد صحيح ومتغير حرف في تعبير السطر الأخير ، وتغيير قيمة متغير العدد الصحيح 'i'. سيتم تحويل رقم ASCII المكافئ لـ 'a' إلى قيمة حرف وإضافته إلى قيمة العدد الصحيح للمتغير 'i' في هذه العبارة. إذا تمت طباعة قيمة المتغير 'i' ، فستكون النتيجة مجموع كلتا القيمتين. يقوم المترجم تلقائيًا بتحويل نوع بيانات متغير الحرف إلى نوع بيانات عدد صحيح عن طريق تحويله إلى قيمة ASCII القياسية للأبجدية على اليمين ، وهو مثال رائع على تحويل النوع الضمني أو الآلي في وقت التشغيل.



الآن ، عندما يتعلق الأمر بصب النوع الصريح أو تحويل النوع ، فهي ليست عملية آلية ؛ يجب على المستخدم تحويل نوع بيانات متغير يدويًا إلى نوع آخر من المتغيرات في الكود. عادةً ما يتم ترتيب أنواع البيانات في تسلسل هرمي بناءً على مساحة الذاكرة الخاصة بهم وكمية المعلومات التي يمكنهم الاحتفاظ بها. لذلك ، عندما يتم استخدام نوع بيانات ذي ترتيب أدنى لتخزين أي معلومات ولكن يجب تحويلها إلى نوع بيانات ذي ترتيب أعلى بحيث يمكن تقليل فقدان المعلومات إلى الحد الأدنى ويمكن تخزين المزيد والمزيد من المعلومات ، يكون من الشائع تحويل النوع الصريح أو تحويل النوع فعله. على سبيل المثال ، نظرًا لأن متغير نوع العدد الصحيح لا يمكنه تخزين القيم بعد الفاصلة العشرية ، فقد نفقد بعض المعلومات إذا واصلنا استخدام متغيرات عدد صحيح. لتجنب هذه الخسارة ، نقوم بتحويل المتغير الصحيح إلى متغير عائم ، مع حفظ القيم بعد الفواصل العشرية ومنع فقدان المعلومات. يمكن تحقيق تحويل النوع الصريح في لغة البرمجة C ++ بإحدى طريقتين: عبر التعيين أو باستخدام عامل التشغيل cast. يتم إجراء تحويل المهمة في تعبير رمز ، ويتم توفير بناء الجملة لهذا التعبير أدناه.



# 'تعبير (نوع البيانات)'

في الكود أعلاه ، يجب أن نضع نوع بيانات صالح داخل القوس ، وبعد القوس ، يجب أن نكتب المتغير أو التعبير الذي نرغب في تعديله في نوع البيانات المكتوب داخل القوس.





سننظر الآن في نوع التحويل الذي قام به مشغلو cast في لغة برمجة C ++. يُطلق على مشغلي Cast أيضًا اسم المشغلين الأحاديين الذين يجبرون المتغير على تغيير نوع بياناته من نوع موجود إلى آخر. هناك أربعة أنواع من عوامل الصب: Static cast ، و Dynamic cast ، و Const cast ، وإعادة تفسير cast.

الصب الديناميكي في C ++:

يعتمد الصب الديناميكي في لغة البرمجة C ++ على مفهوم يسمى RTTI (تعريف نوع وقت التشغيل). RTTI هي وظيفة موجودة في العديد من لغات البرمجة مثل C / C ++ و Ada و Object Pascal. تعريف نوع وقت التشغيل أو المعلومات هي وظيفة تحدد وتستخرج المعلومات المتعلقة بتفاصيل نوع بيانات الكائن في وقت تشغيل البرنامج. توفر هذه الوظيفة مسارًا آمنًا لطرق صب النوع مثل وظيفة 'typeid' أو صب النوع الديناميكي. يكتشف معلومات نوع البيانات في وقت التشغيل ويساعد في تحويل نوع البيانات عندما يكون المشغلون قيد التشغيل.



يتم استخدام الصب الديناميكي في الغالب في C ++ من أجل الصب الآمن لوقت التشغيل. للعمل مع فريق التمثيل الديناميكي ، يجب أن تحتوي الفئة الأساسية على وظيفة افتراضية واحدة. يعمل المصبوب الديناميكي فقط مع الفئات الأساسية متعددة الأشكال لأنه يستخدم هذه المعلومات لتحديد الصب الآمن. عامل الصب الديناميكي يقوم بعملية الصب الديناميكي. الآن بعد أن عرفنا المفاهيم المتعلقة بالتصوير الديناميكي ، يمكننا الذهاب نحو جزء التنفيذ. دعونا أولاً نلقي نظرة على بناء الجملة لاستخدام الصب الديناميكي في لغة البرمجة C ++ ، والتي تتم كتابتها أدناه:

# “dynamic_cast (تعبير)”

في التعبير أعلاه ، يصف الجزء الأول اسم المشغل ؛ في أقواس الزاوية ، نكتب اسم نوع البيانات الذي نحتاج إلى تحويل التعبير إليه ، وفي الأقواس المستديرة ، نكتب المتغير أو اسم الكائن الذي نريد تحويله.

الآن بعد أن عرفنا كيفية استخدام عامل الصب الديناميكي وملء المعلمات لتحويل أنواع البيانات من المتغيرات ، يمكننا استخدامها لتحويل أنواع بيانات المتغيرات.

باستخدام طريقة Dynamic cast في Ubuntu 20.04:

لتنفيذ هذا المفهوم ، يجب علينا استخدام عدة فئات للعمل معها لتحويل كائنات الفئة عن طريق الوراثة. لذلك ، للقيام بذلك أولاً ، يجب أن نعلم أولاً أن ملف برنامج C ++ في بيئة Ubuntu يتم تخزينه بالامتداد '.cpp' ، لذلك لإنشاء هذا الملف على سطح المكتب الخاص بنا ، افتح Terminal واكتب 'cd Desktop' على سطر الأوامر ، ثم اضغط على إدخال واكتب 'touch filename .cpp' لإنشاء ملف بامتداد '.cpp'. سنقوم الآن بكتابة رمز في هذا الملف لإنشاء فئة أساسية وفئتين مشتقتين ، وفي كود المحرك ، سنستخدم عامل الصب الديناميكي.

  واجهة المستخدم الرسومية ، يتم إنشاء الوصف تلقائيًا

اخرج من الملف بعد النقر على زر الحفظ. ارجع إلى المحطة وقم ببناء الملف باستخدام الأمر 'g ++' مع اسم الملف الخاص بك وامتداد '.cpp'. سيتم إنشاء ملف بالملحق “.out” باستخدام هذا الأمر. يمكنك الآن تشغيل هذا الملف عن طريق إدخال './' متبوعًا بامتداد '.out'.
  يتم إنشاء وصف النص تلقائيًا

في هذا البرنامج ، يخزن مؤشر الفئة الأساسية كائنات مشتقة من الفئة 1 (d1). الفئة الأساسية للصب الديناميكي ، احتفظ المؤشر بالكائن Derived1 وخصصه للفئة المشتقة 1 ، والتي قدمت صبًا ديناميكيًا صالحًا.

استنتاج :

علمتنا هذه المقالة طريقة صب النوع المستخدمة في لغة البرمجة C ++. تمت مناقشة نوع الصب أيضًا بالتفصيل ، وركزنا على الحاجة إلى سبب استخدامنا لهذه الأساليب في برمجة C ++. ناقشنا وظيفة المساعدة التي تساعد في تحويل نوع بيانات المتغير عن طريق جلب المعلومات والتحقق من التحويل الصحيح المسمى RTTI. قمنا أيضًا بتطبيق مفهوم الصب الديناميكي باستخدام عامل الصب الديناميكي في تعبير بلغة البرمجة C ++ في بيئة Ubuntu 20.04.