Dynamic_cast C++

Dynamic Cast C



C++ پروگرامنگ زبان میں متحرک کاسٹ پر اس مضمون میں بحث کی جائے گی۔ شروع کرنے کے لیے، ہمیں کاسٹنگ کے تصور اور کاسٹنگ کی کئی اقسام کو سمجھنا چاہیے۔ متغیر کے ڈیٹا کی قسم کو تبدیل کرنے کے عمل کو کاسٹنگ کے نام سے جانا جاتا ہے۔ کاسٹنگ کو C++ پروگرامنگ زبان میں دو قسموں میں تقسیم کیا گیا ہے: مضمر کاسٹنگ اور واضح کاسٹنگ۔

C++ میں ڈیٹا کی قسم کی تبدیلی:

ٹائپ کاسٹنگ ڈیٹا کی قسم کو کسی دوسرے ڈیٹا کی قسم میں تبدیل کرنے کا طریقہ کار ہے۔ C++ پروگرامنگ زبان میں کاسٹنگ یا ٹائپ کنورژن کی دو قسمیں ہیں: مضمر اور واضح کاسٹنگ۔ خودکار قسم کی تبدیلی مضمر ٹائپ کاسٹنگ کا دوسرا نام ہے۔ یہ ریئل ٹائم تالیف کے دوران کمپائلر کے ذریعہ انجام دیا جاتا ہے اور اسے کسی صارف کے ان پٹ یا عمل کی ضرورت نہیں ہوتی ہے۔ جب ایک اظہار میں ڈیٹا کی دو قسمیں ہوتی ہیں، تو کاسٹنگ کی یہ شکل ہوتی ہے۔ مثال کے طور پر:

  گرافیکل یوزر انٹرفیس، ٹیکسٹ، ایپلیکیشن کی تفصیل خود بخود تیار ہوتی ہے۔







دیئے گئے کوڈ میں، ہم دیکھ سکتے ہیں کہ آخری لائن کے اظہار میں ایک عدد متغیر اور ایک حرف متغیر داخل کیا گیا ہے، اور عددی متغیر 'i' کی قدر کو تبدیل کر دیا گیا ہے۔ 'a' کے مساوی ASCII نمبر کو کریکٹر ویلیو میں تبدیل کر دیا جائے گا اور اس بیان میں متغیر 'i' کی عددی قدر میں شامل کر دیا جائے گا۔ اگر متغیر 'i' کی قدر پرنٹ کی جائے تو نتیجہ ان دونوں قدروں کا کل ہوگا۔ کمپائلر کریکٹر متغیر کے ڈیٹا کی قسم کو دائیں جانب حروف تہجی کی ASCII معیاری قدر میں تبدیل کر کے خودکار طور پر ایک عدد ڈیٹا کی قسم میں تبدیل کر دیتا ہے، جو کہ رن ٹائم پر مضمر یا خودکار قسم کی تبدیلی کی ایک بہترین مثال ہے۔



اب، جب واضح قسم کاسٹنگ یا ٹائپ کنورژن کی بات آتی ہے، تو یہ خودکار عمل نہیں ہے۔ صارف کو کوڈ میں متغیر کے ڈیٹا کی قسم کو دستی طور پر دوسری قسم کے متغیر میں تبدیل کرنا چاہیے۔ ڈیٹا کی اقسام کو عام طور پر ان کی میموری کی جگہ اور ان کے پاس موجود معلومات کی مقدار کی بنیاد پر درجہ بندی میں ترتیب دیا جاتا ہے۔ لہذا، جب کسی بھی معلومات کو ذخیرہ کرنے کے لیے لوئر آرڈر ڈیٹا کی قسم کا استعمال کیا جاتا ہے لیکن اسے اعلیٰ ترتیب والے ڈیٹا کی قسم میں تبدیل کرنا پڑتا ہے تاکہ معلومات کے نقصان کو کم سے کم کیا جا سکے اور زیادہ سے زیادہ معلومات کو ذخیرہ کیا جا سکے، واضح قسم کاسٹنگ یا ٹائپ کنورژن عام طور پر ہوتا ہے۔ ہو گیا مثال کے طور پر، کیونکہ عددی قسم کا متغیر اعشاریہ کے بعد اقدار کو ذخیرہ نہیں کرسکتا، اگر ہم عددی متغیرات کا استعمال جاری رکھیں تو ہم کچھ معلومات کھو سکتے ہیں۔ اس نقصان سے بچنے کے لیے، ہم انٹیجر متغیر کو فلوٹ متغیر میں تبدیل کرتے ہیں، اعشاریہ پوائنٹس کے بعد قدروں کو بچاتے ہیں اور معلومات کے نقصان کو روکتے ہیں۔ C++ پروگرامنگ زبان میں واضح قسم کی تبدیلی دو طریقوں میں سے کسی ایک طریقے سے مکمل کی جا سکتی ہے: اسائنمنٹ کے ذریعے یا کاسٹ آپریٹر کو استعمال کر کے۔ تفویض کی تبدیلی ایک کوڈ اظہار میں کی جاتی ہے، اور اس اظہار کے لیے نحو ذیل میں فراہم کیا گیا ہے۔



# '(ڈیٹا کی قسم) اظہار'

مندرجہ بالا کوڈ میں، ہمیں بریکٹ کے اندر ایک درست ڈیٹا ٹائپ ڈالنا چاہیے، اور بریکٹ کے بعد، ہمیں وہ متغیر یا اظہار لکھنا چاہیے جسے ہم بریکٹ کے اندر لکھے گئے ڈیٹا ٹائپ میں تبدیل کرنا چاہتے ہیں۔





اب ہم C++ پروگرامنگ لینگویج میں کاسٹ آپریٹرز کے ذریعے کی جانے والی تبادلوں کی قسم کو دیکھیں گے۔ کاسٹ آپریٹرز کو یونری آپریٹرز بھی کہا جاتا ہے جو ایک متغیر کو اپنے ڈیٹا کی قسم کو موجودہ سے دوسرے میں تبدیل کرنے پر مجبور کرتے ہیں۔ کاسٹنگ کاسٹ آپریٹرز کی چار قسمیں ہیں: سٹیٹک کاسٹ، ڈائنامک کاسٹ، کانسٹ کاسٹ، اور ری انٹرپریٹ کاسٹ۔

C++ میں متحرک کاسٹنگ:

C++ پروگرامنگ لینگویج میں ڈائنامک کاسٹنگ ایک تصور پر مبنی ہے جسے RTTI (رن ٹائم قسم کی شناخت) کہتے ہیں۔ RTTI ایک فنکشن ہے جو کئی پروگرامنگ زبانوں جیسے C/C++، Ada اور Object Pascal میں موجود ہے۔ رن ٹائم ٹائپ آئیڈینٹی فکیشن یا انفارمیشن ایک ایسا فنکشن ہے جو کسی پروگرام کے رن ٹائم پر کسی آبجیکٹ کے ڈیٹا ٹائپ کی تفصیلات سے متعلق معلومات کو شناخت اور نکالتا ہے۔ یہ فنکشن قسم کاسٹنگ کے طریقوں جیسے 'ٹائپائڈ' فنکشن یا ڈائنامک ٹائپ کاسٹنگ کے لیے ایک محفوظ راستہ فراہم کرتا ہے۔ یہ رن ٹائم پر ڈیٹا کی قسم کی معلومات کا پتہ لگاتا ہے اور آپریٹرز کے کھیل میں ہونے پر ڈیٹا کی قسم کی تبدیلی میں مدد کرتا ہے۔



ڈائنامک کاسٹنگ زیادہ تر C++ میں رن ٹائم سیف ڈاؤن کاسٹنگ کے لیے استعمال ہوتی ہے۔ ڈائنامک کاسٹ کے ساتھ کام کرنے کے لیے، بیس کلاس میں 1 ورچوئل فنکشن ہونا چاہیے۔ ڈائنامک کاسٹ صرف پولیمورفک بیس کلاسز کے ساتھ کام کرتا ہے کیونکہ یہ محفوظ ڈاون کاسٹنگ کا تعین کرنے کے لیے اس معلومات کو استعمال کرتا ہے۔ ایک ڈائنامک کاسٹ آپریٹر ڈائنامک کاسٹنگ کرتا ہے۔ اب جب کہ ہم متحرک کاسٹنگ سے متعلق تصورات کے بارے میں جانتے ہیں، ہم نفاذ کے حصے کی طرف جا سکتے ہیں۔ آئیے سب سے پہلے C++ پروگرامنگ لینگویج میں ڈائنامک کاسٹنگ استعمال کرنے کے لیے نحو کو دیکھتے ہیں، جو نیچے لکھا گیا ہے:

# 'متحرک_کاسٹ (اظہار)'

مندرجہ بالا اظہار میں، پہلا حصہ آپریٹر کے نام کی وضاحت کرتا ہے؛ زاویہ بریکٹ میں، ہم ڈیٹا ٹائپ کا نام لکھتے ہیں جس میں ہمیں اپنے اظہار کو تبدیل کرنے کی ضرورت ہے، اور گول بریکٹ میں، ہم متغیر یا آبجیکٹ کا نام لکھتے ہیں جسے ہم تبدیل کرنا چاہتے ہیں۔

اب جب کہ ہم جانتے ہیں کہ ڈائنامک کاسٹ آپریٹر کو کس طرح استعمال کرنا ہے اور متغیرات کی ڈیٹا کی قسموں کو تبدیل کرنے کے لیے پیرامیٹرز کو بھرنا ہے، ہم اسے ڈیٹا کی قسموں کو تبدیل کرنے کے لیے استعمال کر سکتے ہیں۔

Ubuntu 20.04 میں ڈائنامک کاسٹ کا طریقہ استعمال کرنا:

اس تصور کو نافذ کرنے کے لیے، ہمیں وراثت کے ذریعے کلاس کی اشیاء کو تبدیل کرنے کے لیے کام کرنے کے لیے کئی کلاسز کا استعمال کرنا چاہیے۔ لہذا، سب سے پہلے ایسا کرنے کے لیے، ہمیں سب سے پہلے یہ جاننا چاہیے کہ Ubuntu ماحول میں C++ پروگرام کی فائل ایکسٹینشن '.cpp' کے ساتھ محفوظ ہے، لہذا اس فائل کو اپنے ڈیسک ٹاپ پر بنانے کے لیے، ایک ٹرمینل کھولیں اور اس پر 'cd Desktop' ٹائپ کریں۔ کمانڈ لائن، پھر انٹر دبائیں اور '.cpp' ایکسٹینشن کے ساتھ فائل بنانے کے لیے 'touch filename .cpp' ٹائپ کریں۔ اب ہم اس فائل میں ایک کوڈ لکھیں گے تاکہ بیس کلاس اور 2 ماخوذ کلاسز بنائیں، اور ڈرائیور کوڈ میں، ہم ڈائنامک کاسٹ آپریٹر استعمال کریں گے۔

  گرافیکل یوزر انٹرفیس، ٹیکسٹ کی تفصیل خود بخود تیار ہوتی ہے۔

محفوظ کریں بٹن پر کلک کرنے کے بعد فائل سے باہر نکلیں۔ ٹرمینل پر واپس جائیں اور اپنی فائل کے نام اور '.cpp' ایکسٹینشن کے ساتھ 'g++' کمانڈ استعمال کرکے فائل بنائیں۔ اس کمانڈ کا استعمال کرتے ہوئے '.out' ایکسٹینشن والی فائل بنائی جائے گی۔ اب آپ اپنی '.out' ایکسٹینشن کے بعد './' درج کرکے اس فائل کو چلا سکتے ہیں۔
  متن کی تفصیل خود بخود تیار ہو گئی۔

اس پروگرام میں، بیس کلاس پوائنٹر کلاس 1 اشیاء (d1) سے ماخوذ اسٹور کرتا ہے۔ ڈائنامک کاسٹنگ بیس کلاس، پوائنٹر نے Derived1 آبجیکٹ کو برقرار رکھا اور اسے اخذ شدہ کلاس 1 کے لیے مختص کیا، جس نے درست ڈائنامک کاسٹنگ فراہم کی۔

نتیجہ :

اس مضمون نے ہمیں C++ پروگرامنگ زبان میں استعمال ہونے والی قسم کاسٹنگ کا طریقہ سکھایا۔ کاسٹنگ کی قسم پر بھی تفصیل سے تبادلہ خیال کیا گیا، اور ہم نے اس ضرورت پر توجہ مرکوز کی کہ ہم C++ پروگرامنگ میں ایسے طریقے کیوں استعمال کرتے ہیں۔ ہم نے اسسٹ فنکشن پر تبادلہ خیال کیا جو RTTI نامی درست تبدیلی کے لیے معلومات حاصل کرکے اور تصدیق کرکے متغیر کے ڈیٹا کی قسم کو تبدیل کرنے میں مدد کرتا ہے۔ ہم نے Dynamic casting کے تصور کو بھی Ubuntu 20.04 ماحول میں C++ پروگرامنگ لینگویج میں اظہار میں ڈائنامک کاسٹ آپریٹر کا استعمال کرتے ہوئے نافذ کیا۔