ورچوئل اور خالص ورچوئل فنکشن کے مابین فرق

مصنف: Laura McKinney
تخلیق کی تاریخ: 2 اپریل 2021
تازہ کاری کی تاریخ: 11 مئی 2024
Anonim
OOP میں ورچوئل فنکشنز، خالص ورچوئل فنکشنز اور خلاصہ کلاسز کے درمیان تعلق کی وضاحت کی گئی
ویڈیو: OOP میں ورچوئل فنکشنز، خالص ورچوئل فنکشنز اور خلاصہ کلاسز کے درمیان تعلق کی وضاحت کی گئی

مواد


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

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

پولیمورفزم کو C ++ اور جاوا دونوں زبانوں کی تائید حاصل ہے۔ جاوا میں ، "ورورائڈنگ" کی اصطلاح "ورچوئل فنکشن" کی بجائے استعمال کی جاتی ہے ، کیوں کہ ورچوئل فنکشن C ++ کی اصطلاح ہے۔

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

موازنہ چارٹ

موازنہ کی بنیادورچوئل فنکشنخالص ورچوئل فنکشن
بنیادیمجازی فنکشن کی بنیاد بیس کلاس میں ان کی تعریف ہوتی ہے۔بیس کلاس میں خالص ورچوئل فنکشن کی کوئی تعریف نہیں ہے۔
اعلامیہورچوئل فنکٹ نام (پیرامیٹر_ فہرست) {۔ . . . .}؛ورچوئل فنکٹ نام (پیرامیٹر_ فہرست) = 0؛
اخذ کلاستمام اخذ کلاسز بیس کلاس کے ورچوئل فنکشن کو اوور رائیڈ کرسکتی ہیں۔تمام مشتق کلاسوں کو بیس کلاس کے ورچوئل فنکشن کو اوور رائڈ کرنا ہوگا۔
اثر

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


ورچوئل فنکشن کی تعریف

ورچوئل فنکشن بیس کلاس کا ممبر فنکشن ہوتا ہے ، اور اس کی ماخذ کلاسوں کے ذریعہ نئی تعریف ہوتی ہے جو بیس کلاس کو وراثت میں ملتی ہے۔ یہ ضروری نہیں ہے کہ وراثت سے حاصل ہونے والی تمام کلاسوں کو ورچوئل فنکشن کی نئی وضاحت کرنی چاہئے ، یہ صرف ان ماخذ طبقے کے ذریعہ دوبارہ وضاحت کی گئی ہے جس کے لئے اس کے کام کی ضرورت پڑسکتی ہے۔ کلیدی لفظ سے پہلے بیس کلاس میں فنکشن کا اعلان کرکے ایک ورچوئل فنکشن تخلیق کیا جاتا ہے 'مجازی'.

اعلامیہ:

کلاس بیس {عوامی: ورچوئل ٹائپ funt_name (پیرامیٹر لسٹ) {۔ . . }}؛

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


ملٹی لیول وراثت

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

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

خالص ورچوئل فنکشن کی تعریف

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

ان دو صورتحالوں سے نمٹنے کے لئے ، C ++ "کے تصور کی حمایت کرتا ہےخالص ورچوئل فنکشن“۔ ایک ’خالص ورچوئل فنکشن‘ بیس کلاس میں اعلان کیا جاتا ہے لیکن بیس کلاس میں اس کی تعریف نہیں ہے۔ خالص ورچوئل فنکشن کا اعلان مندرجہ ذیل ہے۔

ورچوئل ٹائپ funct_name (پیرامیٹر_ لسٹ) = 0؛

جب بھی بیس کلاس میں ورچوئل فنکشن کو "خالص" بنایا جاتا ہے ، تب ہر ماخوذ طبقے کو لازمی طور پر بیس کلاس کے خالص ورچوئل فنکشن کو اوور رائیڈ کرنا ہوگا۔ اگر مشتق کلاس بیس کلاس کے خالص ورچوئل فنکشن کو اوور رائڈ کرنے میں ناکام رہتا ہے تو ، اس کے نتیجے میں تالیف کی خرابی ہوگی۔

خلاصہ کلاس

جس کلاس میں کم از کم ایک خالص فنکشن ہوتا ہے اسے "تجریدی کلاس" کہا جاتا ہے۔ خلاصہ کلاسوں کی کوئی چیزیں تخلیق نہیں کی جاسکتی ہیں ، لیکن آپ خلاصہ کلاسوں کے حوالہ جات اور پوائنٹر تشکیل دے سکتے ہیں۔ خلاصہ کلاسوں کے ممبروں کو اخذ کردہ کلاسوں کے مقصد سے حاصل کیا جاسکتا ہے جو خلاصہ بیس کلاس کو وراثت میں ملتا ہے۔

ایک کلاس جسے آپ خلاصہ قرار دینا چاہتے ہیں ، کلیدی لفظ استعمال کریں ‘تجریدی’ کے سامنے ‘کلاس’ مطلوبہ الفاظ

// مثال کے طور پر تجریدی کلاس کلاس نام {۔ . ورچوئل ٹائپ funct_name (پیرامیٹر_ لسٹ) = 0؛ . . }؛

  1. ورچوئل افعال کو یقینی طور پر بیس کلاس میں بیان کیا جاتا ہے اور اخذ کردہ کلاس میں دوبارہ تعریف شدہ (اوور رائڈ) ہوتا ہے۔ دوسری طرف ، خالص ورچوئل فنکشن بیس کلاس کو خاص طور پر بیس کلاس میں متعین نہیں کیا جاتا ہے
  2. اگر مطلوبہ ورچوئل فنکشن کی دوبارہ وضاحت (اوور رائڈ) کی جائے تو اخذ شدہ کلاس جبکہ خالص ورچوئل فنکشن کی صورت میں اخذ کلاس کو یقینی طور پر خالص ورچوئل فنکشن کی دوبارہ وضاحت کرنا ہوگی۔
  3. اگر اخذ کردہ کلاس ورچوئل فنکشن کی نئی وضاحت (اوور رائڈ) کرنے میں ناکام ہو جاتا ہے تو یہ بیس کلاس کے ورچوئل فنکشن کا استعمال کرسکتا ہے۔ اس کے برعکس ، اگر کوئی اخذ شدہ کلاس خالص ورچوئل فنکشن کو اوور رائڈ کرنے میں ناکام رہتی ہے تو پھر تالیف کی خرابی واقع ہوتی ہے۔
  4. ورچوئل فنکشن پر مشتمل بیس کلاس کو انسٹیٹیٹ کیا جاسکتا ہے یعنی اس کا مقصد بنایا جاسکتا ہے۔ اس کے برخلاف ، خالص ورچوئل فنکشن پر مشتمل بیس کلاس یعنی ایک تجریدی کلاس کو فوری نہیں بنایا جاسکتا کیونکہ خلاصہ کلاس پوری طرح سے متعین نہیں ہے۔

نوٹ:
پورے پروگرام میں 'ورچوئل فنکشن' اور 'خالص ورچوئل فنکشن' کی پروٹو ٹائپ ایک جیسی ہی ہے۔

نتیجہ:

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