سی ++ میں فنکشن اوورلوڈنگ اور اوور رائیڈنگ کے مابین فرق

مصنف: Laura McKinney
تخلیق کی تاریخ: 1 اپریل 2021
تازہ کاری کی تاریخ: 12 مئی 2024
Anonim
سی ++ میں فنکشن اوورلوڈنگ اور اوور رائیڈنگ کے مابین فرق - ٹیکنالوجی
سی ++ میں فنکشن اوورلوڈنگ اور اوور رائیڈنگ کے مابین فرق - ٹیکنالوجی

مواد


میں ‘زیادہ بوجھ‘ہم اوورلوڈڈ افعال کو ایک ہی فنکشن کے نام کے ساتھ نئی شکل دیتے ہیں لیکن ، مختلف نمبر اور پیرامیٹرز کی طرح۔ میں ‘زیر اثر‘پورے پروگرام میں اوور رائڈ فنکشن کی پروٹو ٹائپ ایک جیسی ہے لیکن ، فنکشن کو اوور رائیڈ کرنے سے پہلے بیس کلاس میں کلیدی لفظ‘ ورچوئل ’لگایا جاتا ہے اور بغیر کسی کلیدی لفظ کے مشتق کلاس کے ذریعہ اس کی دوبارہ وضاحت کی جاتی ہے۔

پولیمورفزم او او پی کی ایک اہم خصوصیت ہے۔ اس کا سیدھا مطلب ہے کہ 'ایک سے زیادہ شکلوں کے لئے ایک نام استعمال کرنا'۔ پولیمورفزم کو ‘فنکشن اوورلوڈنگ’ ، ‘آپریٹر اوورلوڈنگ’ اور ‘ورچوئل فنکشن’ کا استعمال کرتے ہوئے لاگو کیا جاسکتا ہے۔ دونوں ، ‘اوورلوڈنگ’ اور ‘اوور رائیڈنگ’ سے کثیر المثالیت کے تصور کا مطلب ہے۔ یہاں ، ’اوورلوڈنگ‘ ٹائم ٹائم پولیورفزم ہے اور ’اوور رائیڈنگ‘ رن ٹائم پولیومورفزم ہے۔ مزید مطالعہ ، اگر ہم ’اوورلوڈنگ‘ اور ’اوور رائیڈنگ‘ میں بڑے فرق کے بارے میں بات کرتے ہیں۔

مزید یہ کہ ہم موازنہ چارٹ کی مدد سے اوورلوڈنگ اور اوور رائیڈنگ کے مابین فرق کا مطالعہ کرتے ہیں۔

  1. موازنہ چارٹ
  2. تعریف
  3. کلیدی اختلافات
  4. مماثلت
  5. نتیجہ اخذ کرنا


موازنہ چارٹ:

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


اوورلوڈنگ کی تعریف

کمپائل ٹائم پولیمورفزم کو ’اوورلوڈنگ‘ کہا جاتا ہے۔ ’چونکہ کثیرالمعارفیت کے تصور سے اوورلوڈنگ تیار ہوتی ہے ، لہذا یہ" متعدد طریقوں کے لئے مشترکہ انٹرفیس "مہیا کرتی ہے۔ اس کا مطلب یہ ہے کہ ، اگر کسی فنکشن کو زیادہ بوجھ دیا جاتا ہے تو ، اس میں فنکشن کا وہی نام ہوتا ہے جب اس کی وضاحت کی جاتی ہو۔

اوورلوڈڈ افعال ، مختلف ‘نمبر یا پیرامیٹر (قسم) کی قسم’ کے سلسلے میں مختلف ہیں ، یہ ایک اوورلوڈڈ فنکشن کو دوسرے سے الگ کرتا ہے۔ اس طرح سے ، مرتب کرنے والا پہچانتا ہے کہ کون سے اوورلوڈ فنکشن کو بلایا جارہا ہے۔ زیادہ تر عام طور پر اوورلوڈ افعال ’تعمیر کنندگان‘ ہوتے ہیں۔ ‘کاپی کنسٹرکٹر’ ایک طرح سے "کنسٹرکٹر اوورلوڈنگ" ہے۔

C ++ میں اوورلوڈنگ کا نفاذ

کلاس اوورلوڈ {انٹ اے ، بی؛ عوامی: انٹ لوڈ (انٹ ایکس) {// پہلا بوجھ () فنکشن a = x؛ واپس a؛ load انٹ لوڈ (انٹ ایکس ، انٹ ی) {// دوسرا بوجھ () فنکشن a = x؛ b = y؛ ایک * بی واپس؛ }}؛ INT مین () {اوورلوڈ O1؛ O1.load (20)؛ // پہلا بوجھ () فنکشن کال O1.load (20،40)؛ // دوسرا بوجھ () فنکشن کال}

یہاں فنکشن بوجھ () کلاس اوورلوڈ سے زیادہ ہوگیا ہے۔ کلاس کے دو اوورلوڈ افعال کو اس انداز سے پہچانا جاسکتا ہے کہ پہلا بوجھ () فنکشن صرف ایک ایکٹیر پیرامیٹر کو قبول کرتا ہے ، جبکہ دوسرا بوجھ () فنکشن دو عددی پیرامیٹر کو قبول کرتا ہے۔ جب کلاس اوورلوڈ کا مقصد ایک ہی پیرامیٹر کے ساتھ بوجھ () فنکشن کو کال کرتا ہے تو ، پہلے بوجھ () فنکشن کو بلایا جاتا ہے۔ جب آبجیکٹ کو کال کرتے ہیں تو لوڈ () فنکشن دو پیرامیٹرز کو پاس کرتا ہے تو ، دوسرا بوجھ () فنکشن بلایا جاتا ہے۔


اوور رائیڈنگ کی تعریف

رن ٹائم کے دوران حاصل کردہ پولیمورفزم کو ’اوور رائیڈنگ‘ کہا جاتا ہے۔ ’یہ’ وراثت ‘اور’ ورچوئل فنکشنز ‘استعمال کرکے مکمل ہوتا ہے۔ مسترد ہونے والے فنکشن سے پہلے بیس کلاس میں کلیدی لفظ ‘ورچوئل’ لگایا جاتا ہے اور بغیر کسی مطلوبہ الفاظ کے مشتق کلاس میں اس کی نئی تعریف کی جاتی ہے۔

اوور رائیڈنگ کے معاملے میں یاد رکھنے والی ایک سب سے اہم بات یہ ہے کہ مسترد شدہ فنکشن کا پروٹو ٹائپ تبدیل نہیں ہونا چاہئے جبکہ اخذ کردہ کلاس اس کی نئی وضاحت کرتا ہے۔ جب اوور رائیڈ فنکشن کو کال دی جاتی ہے تو ، C ++ اس بات کا تعین کرتا ہے کہ فنکشن کا کون سا ورژن ’’ ایک پوائنٹر کے ذریعہ اشارہ کردہ آبجیکٹ کی قسم ‘‘ کے ذریعہ کہا جاتا ہے جس کے ذریعے فنکشن کالنگ کی جاتی ہے۔

C ++ میں اوور رائیڈنگ کا نفاذ

کلاس بیس {عوامی: ورچوئل باطل فنکٹ () base // بیس کلاس cout کا ورچوئل فنکشن << "یہ ایک بیس کلاسز فنکٹ ہے ()"؛ }}؛ کلاس اخذ شدہ 1: عوامی بنیاد {عوام: باطل فنکٹ () {// بیسک کلاس کا ورچوئل فنکشن ڈیریوڈ 1 کلاس cout میں دوبارہ متعین << "یہ ایک مشتق کلاسی فنکٹ () ہے؛ }}؛ کلاس مشتق 2: عوامی بنیاد {عوام: باطل فنکٹ () {// بیسک کلاس کا ورچوئل فنکشن ڈیریوٹڈ 2 کلاس cout میں دوبارہ متعین << "یہ ایک مشتق 2 کلاس فنکٹ () ہے؛ }}؛ انٹ مین مین () {بیس * پی ، بی؛ اخذ کردہ 1 d1؛ اخذ کردہ 2 d2؛ * پی = & بی؛ p-> فنکٹ ()؛ // بیس کلاس فنکٹ () پر کال کریں۔ * p = & d1؛ p-> فنکٹ ()؛ // کال کرنے سے مشتق 1 کلاس فنکٹ ()۔ * p = & d2؛ p-> فنکٹ ()؛ // کال کرنے سے مشتق 2 کلاس فنکٹ ()۔ واپسی 0؛ }

یہاں ، ایک واحد بیس کلاس ہے جو عوامی طور پر دو مشتق کلاسوں کے ذریعہ وراثت میں ملتی ہے۔ ایک ورچوئل فنکشن کی بنیاد بیس کلاس میں "ورچوئل" کی ورڈ سے کی گئی ہے ، اور اس کی نئی تعریف دونوں ہی اخذ شدہ کلاسوں سے کی گئی ہے جس میں کوئی کی ورڈ نہیں ہے اہم () میں ، بیس کلاس ایک پوائنٹر متغیر ’پی‘ اور ایک شے ‘بی’ بناتی ہے۔ ‘اخذ شدہ 1 ′ کلاس ایک آبجیکٹ ڈی 1 تیار کرتا ہے اور مشتق کلاس ایک آبجیکٹ ڈی 2 بناتا ہے۔

اب ، ابتدا میں بیس کلاس کے آبجیکٹ ‘بی’ کا پتہ بیس کلاس ‘پی’ کے پوائنٹر کو تفویض کیا گیا ہے۔ ‘p’ فنکشن فنکٹ () کو کال دیتا ہے ، لہذا بیس کلاس کا ایک فنکشن بلایا جاتا ہے۔پھر اخذ کردہ 1 کلاس آبجیکٹ ‘d1’ کا پتہ پوائنٹر ‘p’ کو تفویض کیا جاتا ہے ، پھر اس سے فنکشن ()؛ یہاں ڈیریوڈ 1 کلاس کے فنکشن فنکٹ () کو پھانسی دے دی گئی ہے۔ آخر میں ، پوائنٹر 'p' کو مشتق 2 کلاس کے آبجیکٹ کے لئے تفویض کیا گیا ہے۔ پھر ‘p’ کال فنکشن فنکٹ () کو کہتے ہیں جو اخذ کردہ 2 کلاس کے فنکشن فنکٹ () پر عملدرآمد کرتا ہے۔

اگر مشتق 1 / اخذ کردہ 2 کلاس فنکٹ () کو دوبارہ متعین نہیں کرتے تھے ، تو پھر بیس کلاس کے فنکٹ () کو بلایا جاتا ، کیوں کہ ورچوئل فنکشن ’درجہ بندی‘ ہے۔

  1. کسی فنکشن کی پروٹو ٹائپ جس سے زیادہ بوجھ ڈالا جارہا ہے اس کی وجہ پیرامیٹر کی قسم اور تعداد زیادہ ہے جو اوورلوڈ فنکشن میں منتقل ہوجاتا ہے۔ دوسری طرف ، اوور رائڈ فنکشن کا پروٹو ٹائپ تبدیل نہیں ہوتا ہے کیونکہ اوور رائڈ فنکشن مختلف کلاس کے لئے مختلف ایکشن سرانجام دیتا ہے جس سے تعلق رکھتا ہے لیکن ایک ہی قسم اور پیرامیٹر کی تعداد کے ساتھ۔
  2. اوورلوڈڈ فنکشن کا نام کسی کلیدی لفظ سے پہلے نہیں ہے جبکہ صرف بیس کلاس میں ہی کلید "ورچوئل" کے ساتھ اوورروڈ فنکشن کا نام سامنے آتا ہے۔
  3. کون سے اوورلوڈ فنکشن کا انحصار پیرامیٹر کی قسم یا تعداد پر ہوتا ہے جو فنکشن میں منتقل ہوتا ہے۔ جس طبقے کی طلب کی گئی ہے اس کا انحصار اس بات پر منحصر ہے ، کہ کونسی کلاس کا آبجیکٹ ایڈریس پوائنٹر کو تفویض کیا گیا ہے ، جس نے فنکشن کو طلب کیا۔
  4. کون سے اوورلوڈ فنکشن کو طلب کرنا ہے مرتب وقت کے دوران حل ہوجاتا ہے۔ درخواست کی جانے والی کون سے کام کو رن ٹائم کے دوران حل کیا جاتا ہے؟
  5. کنسٹرکٹرز اوورلوڈ ہوسکتے ہیں لیکن اوور رائیڈ نہیں ہوسکتے ہیں۔
  6. تباہ کنوں کو زیادہ بوجھ نہیں دیا جاسکتا ہے ، لیکن ان کو اوور رائیڈ کیا جاسکتا ہے۔
  7. اوورلوڈنگ ابتدائی پابندی کو حاصل کرتی ہے کیوں کہ اوورلوڈڈ فنکشن طلب کیا جائے گا مرتب وقت کے دوران حل ہوجاتا ہے۔ اوور رائڈنگ دیر سے پابندی کو حاصل کرتی ہے کیوں کہ اوور رائیڈ فنکشن کی درخواست کی جائے گی جو رن ٹائم کے دوران حل ہوجائے گی۔

مماثلت

  1. دونوں کا اطلاق کلاس کے ممبران کے فرائض پر ہوتا ہے۔
  2. پولیمورفزم ان دونوں کے پیچھے بنیادی تصور ہے۔
  3. جب ہم افعال پر اوورلوڈنگ اور اوور رائیڈنگ لگاتے ہیں تو فنکشن کا نام ایک ہی رہتا ہے۔

نتیجہ اخذ کرنا

اوورلوڈنگ اور اوور رائیڈنگ اسی طرح کی ظاہر ہوتی ہے ، لیکن ایسا نہیں ہے۔ افعال کو زیادہ بوجھ دیا جاسکتا ہے لیکن ، مستقبل میں کسی بھی طبقے سے زیادہ بوجھ والے فنکشن کی مزید وضاحت نہیں کی جاسکتی ہے۔ ورچوئل فنکشن کو زیادہ بوجھ نہیں دیا جاسکتا ہے۔ انہیں صرف زیر کیا جاسکتا ہے۔