ভার্চুয়াল এবং খাঁটি ভার্চুয়াল ফাংশন মধ্যে পার্থক্য

লেখক: Laura McKinney
সৃষ্টির তারিখ: 2 এপ্রিল 2021
আপডেটের তারিখ: 7 মে 2024
Anonim
ভার্চুয়াল ফাংশন, বিশুদ্ধ ভার্চুয়াল ফাংশন এবং ওওপি-তে বিমূর্ত ক্লাসের মধ্যে সম্পর্ক ব্যাখ্যা করা হয়েছে
ভিডিও: ভার্চুয়াল ফাংশন, বিশুদ্ধ ভার্চুয়াল ফাংশন এবং ওওপি-তে বিমূর্ত ক্লাসের মধ্যে সম্পর্ক ব্যাখ্যা করা হয়েছে

কন্টেন্ট


ভার্চুয়াল ফাংশন এবং খাঁটি ভার্চুয়াল ফাংশন উভয়ই রান টাইম পলিমারফিজমের ধারণা। এর মধ্যে প্রধান পার্থক্যভার্চুয়াল ফাংশন ’ এবং ‘খাঁটি ভার্চুয়াল ফাংশন’ এটিই যে ‘ভার্চুয়াল ফাংশন’ এর বেস শ্রেণিতে এর সংজ্ঞা রয়েছে এবং উত্তরাধিকার সূত্রে প্রাপ্ত বর্গগুলিও এটিকে নতুন করে সংজ্ঞায়িত করে। খাঁটি ভার্চুয়াল ফাংশনটির বেস শ্রেণিতে কোনও সংজ্ঞা নেই এবং উত্তরাধিকার সূত্রে প্রাপ্ত সমস্ত বর্গকে এটি নতুন করে সংজ্ঞায়িত করতে হবে।

যাইহোক, ভার্চুয়াল ফাংশনটি ডায়নামিক প্রেরন এবং রান-টাইম প্রেরণ হিসাবেও ডাকা হয়, যার জন্য ডাকা ফাংশনটি ব্যবহৃত অবজেক্টের ধরণ অনুসারে রান টাইমে নির্দিষ্ট করা হয়।

পলিমারফিজম সি ++ এবং জাভা উভয় ভাষাতেই সমর্থিত। জাভাতে, "ভার্চুয়াল ফাংশন" এর পরিবর্তে "ওভাররাইডিং" শব্দটি ব্যবহৃত হয়, কারণ ভার্চুয়াল ফাংশনটি সি ++ এর পদ।

  1. তুলনা রেখাচিত্র
  2. সংজ্ঞা
  3. মূল পার্থক্য
  4. উপসংহার

তুলনা রেখাচিত্র

তুলনা করার জন্য ভিত্তিভার্চুয়াল ফাংশনখাঁটি ভার্চুয়াল ফাংশন
মৌলিকভার্চুয়াল ফাংশনটির বেস শ্রেণিতে তাদের সংজ্ঞা রয়েছে।বেস ক্লাসে খাঁটি ভার্চুয়াল ফাংশনের কোনও সংজ্ঞা নেই।
ঘোষণাভার্চুয়াল ফান্ট_নাম (প্যারামিটার_লিস্ট) {{ । । । ।};ভার্চুয়াল ফান্ট_নেম (প্যারামিটার_লিস্ট) = 0;
উত্সর্গীকৃত ক্লাসসমস্ত উত্পন্ন ক্লাস বেস ক্লাসের ভার্চুয়াল ফাংশনটিকে ওভাররাইড করতে পারে বা নাও করতে পারে।সমস্ত উত্পন্ন ক্লাস অবশ্যই বেস শ্রেণীর ভার্চুয়াল ফাংশন ওভাররাইড করতে হবে।
প্রভাব

ভার্চুয়াল ফাংশন প্রকৃতিতে শ্রেণিবদ্ধ; কোনও উত্পন্ন শ্রেণি যদি বেস শ্রেণির ভার্চুয়াল ফাংশনটিকে ওভাররাইড না করে তবে এটি সংকলনকে প্রভাবিত করে না।সমস্ত উত্পন্ন শ্রেণি যদি বেস শ্রেণীর ভার্চুয়াল ফাংশনটিকে ওভাররাইড করতে ব্যর্থ হয় তবে সংকলনের ত্রুটি ঘটবে।
বিমূর্ত শ্রেণিকোন ধারণা নেই।যদি কোনও শ্রেণিতে কমপক্ষে একটি খাঁটি ভার্চুয়াল ফাংশন থাকে তবে এটি বিমূর্ত হিসাবে ঘোষণা করা হয়।


ভার্চুয়াল ফাংশন সংজ্ঞা

দ্য ভার্চুয়াল ফাংশন বেস ক্লাসের সদস্য ফাংশন, এবং এটি ভিত্তিক বর্গের উত্তরাধিকার সূত্রে প্রাপ্ত উদ্ভূত শ্রেণীর দ্বারা পুনরায় সংজ্ঞায়িত হয়। এটি প্রয়োজনীয় নয় যে উত্তরাধিকার সূত্রে প্রাপ্ত সমস্ত শ্রেণীর ভার্চুয়াল ফাংশনটিকে নতুনভাবে সংজ্ঞায়িত করতে হবে, এটি কেবলমাত্র সেই উদ্ভূত শ্রেণীর দ্বারা পুনরায় সংজ্ঞায়িত করা হয়েছে যার জন্য এটির কার্যকরীকরণের প্রয়োজন হতে পারে। কীওয়ার্ডের পূর্ববর্তী বেস ক্লাসে ফাংশনটি ঘোষণা করে একটি ভার্চুয়াল ফাংশন তৈরি করা হয় 'ভার্চুয়াল'.

ঘোষণা:

শ্রেণী বেস {সর্বজনীন: ভার্চুয়াল টাইপ funt_name (পরামিতি-তালিকা) {। । । }};

উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসগুলি কোনও ‘ভার্চুয়াল’ কীওয়ার্ড ছাড়াই ভার্চুয়াল ফাংশনটিকে নতুন করে সংজ্ঞায়িত করতে পারে। উত্পন্ন ক্লাসগুলি তার কার্য সম্পাদন করতে ভার্চুয়াল ফাংশনটিকে নতুনভাবে সংজ্ঞায়িত করে। ভার্চুয়াল ফাংশনটি উদ্ভূত শ্রেণিতে যেমন নতুনভাবে সংজ্ঞায়িত করা হয়েছে, আমাদের একই ফাংশনের একাধিক ফর্ম রয়েছে। এখন, ফাংশনটির কোন সংস্করণ বলা হচ্ছে, সেই ফাংশনটির জন্য কী ধরণের অবজেক্টটি উল্লেখ করা হয়েছে তার উপর নির্ভর করে।


বহুস্তরের উত্তরাধিকার

বহুস্তরের উত্তরাধিকারে, যেখানে একটি উদ্ভূত শ্রেণি ভার্চুয়াল ফাংশনটি তার বেস বর্গ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে, যখন নিজেই অন্য উত্পন্ন শ্রেণীর জন্য বেস শ্রেণি হিসাবে ব্যবহৃত হয়, তখন ভার্চুয়াল ফাংশনটি ওভাররাইড করা যায়। সুতরাং, যখন ভার্চুয়াল ফাংশন উত্তরাধিকার সূত্রে প্রাপ্ত হয় তখন তার ভার্চুয়াল প্রকৃতিও উত্তরাধিকার সূত্রে প্রাপ্ত হয়।

ভার্চুয়াল ফাংশনগুলি প্রকৃতিতে হায়ারার্কিকালও, অর্থাত্ যদি কোনও উদ্ভূত শ্রেণি বেস শ্রেণীর উত্তরাধিকার সূত্রে প্রাপ্ত ভার্চুয়াল ফাংশনটিকে ওভাররাইড / পুনরায় সংজ্ঞায়িত না করে এবং যখন উত্পন্ন শ্রেণীর অবজেক্টটি সেই ভার্চুয়াল ফাংশনটি আহ্বান করে, তবে বেস শ্রেণীর দ্বারা সংজ্ঞায়িত ভার্চুয়াল ফাংশনটি চাওয়া হয়।

খাঁটি ভার্চুয়াল ফাংশন সংজ্ঞা

উপরে যেমন দেখা গেছে যে যদি উত্পন্ন শ্রেণি ভার্চুয়াল ফাংশনটিকে ওভাররাইড না করে তবে বেস শ্রেণীর দ্বারা সংজ্ঞায়িত ভার্চুয়াল ফাংশন ব্যবহৃত হয়। তবে, যদি বেস ক্লাস নিজেই ভার্চুয়াল ফাংশনটি সংজ্ঞায়িত না করে তবে। অনেক সময়, বেস শ্রেণীর ভার্চুয়াল ফাংশনটির জন্য কোনও সংজ্ঞা থাকে না, বা কখনও কখনও আপনি চান যে সমস্ত উত্পন্ন শ্রেণি অবশ্যই ভার্চুয়াল ফাংশনটিকে ওভাররাইড করে।

এই উপরোক্ত দুটি পরিস্থিতি পরিচালনা করতে, C ++ "এর ধারণাকে সমর্থন করেখাঁটি ভার্চুয়াল ফাংশন"। একটি ‘খাঁটি ভার্চুয়াল ফাংশন’ বেস শ্রেণিতে ঘোষিত হয় তবে বেস শ্রেণিতে এর সংজ্ঞা নেই। খাঁটি ভার্চুয়াল ফাংশনটি নীচে ঘোষণা করা হয়েছে।

ভার্চুয়াল টাইপ ফান্ট_নাম (প্যারামিটার_লিস্ট) = 0;

যখনই বেস ক্লাসে ভার্চুয়াল ফাংশনটি "খাঁটি" করা হয়, তারপরে প্রতিটি উত্পন্ন শ্রেণিকে বাধ্যতামূলকভাবে বেস শ্রেণীর খাঁটি ভার্চুয়াল ফাংশনটিকে ওভাররাইড করতে হবে। যদি উত্পন্ন শ্রেণিটি বেস শ্রেণীর বিশুদ্ধ ভার্চুয়াল ফাংশনটিকে ওভাররাইড করতে ব্যর্থ হয় তবে এর ফলে সংকলন ত্রুটি হবে।

বিমূর্ত শ্রেণি

কমপক্ষে একটি খাঁটি ফাংশন রয়েছে এমন শ্রেণিকে "বিমূর্ত শ্রেণি" বলা হয়। বিমূর্ত শ্রেণীর কোনও অবজেক্ট তৈরি করা যায় না, তবে আপনি বিমূর্ত ক্লাসে রেফারেন্স এবং পয়েন্টার তৈরি করতে পারেন। বিমূর্ত শ্রেণীর সদস্যদের বিমূর্ত বেস শ্রেণীর উত্তরাধিকার সূত্রে প্রাপ্ত উত্পন্ন শ্রেণীর অবজেক্টের মাধ্যমে অ্যাক্সেস করা যেতে পারে।

একটি শ্রেণি যা আপনি বিমূর্ত ঘোষণা করতে চান, কীওয়ার্ডটি ব্যবহার করুন 'বিমূর্ত' এর সামনে 'বর্গ' শব্দ।

// উদাহরণস্বরূপ বিমূর্ত শ্রেণীর শ্রেণি-নাম {{ । ভার্চুয়াল টাইপ ফান্ট_নাম (প্যারামিটার_লিস্ট) = 0; । । };

  1. ভার্চুয়াল ফাংশনগুলি অবশ্যই বেস ক্লাসে সংজ্ঞায়িত হয় এবং উত্পন্ন শ্রেণিতে পুনরায় সংজ্ঞায়িত (ওভাররাইড) হয়। অন্যদিকে, খাঁটি ভার্চুয়াল ফাংশন বেস ক্লাসটি বিশেষত বেস ক্লাসে সংজ্ঞায়িত হয় না
  2. যদি প্রয়োজন হয় তবে ভার্চুয়াল ফাংশনটি পুনরায় সংজ্ঞায়িত (ওভাররাইড) করা বর্গ যেখানে খাঁটি ভার্চুয়াল ফাংশনের ক্ষেত্রে উদ্ভূত শ্রেণিকে অবশ্যই খাঁটি ভার্চুয়াল ফাংশনটি পুনরায় সংজ্ঞায়িত করতে হবে।
  3. যদি উদ্ভূত শ্রেণি ভার্চুয়াল ফাংশনটির নতুন সংজ্ঞা (ওভাররাইড) করতে ব্যর্থ হয় তবে এটি বেস শ্রেণীর ভার্চুয়াল ফাংশনটি ব্যবহার করতে পারে। বিপরীতে, যদি কোনও উত্পন্ন শ্রেণি বিশুদ্ধ ভার্চুয়াল ফাংশনটিকে ওভাররাইড করতে ব্যর্থ হয় তবে সংকলন ত্রুটি ঘটে।
  4. ভার্চুয়াল ফাংশনযুক্ত বেস ক্লাসটি তাত্ক্ষণিকভাবে তৈরি করা যেতে পারে অর্থাৎ এর অবজেক্টটি তৈরি করা যেতে পারে। বিপরীতে, খাঁটি ভার্চুয়াল ফাংশন সম্বলিত বেস শ্রেণিটি যেমন একটি বিমূর্ত শ্রেণি পুরোপুরি সংজ্ঞায়িত না হওয়ায় ইনস্ট্যান্ট করা যাবে না।

বিঃদ্রঃ:
‘ভার্চুয়াল ফাংশন’ এবং ‘খাঁটি ভার্চুয়াল ফাংশন’ এর প্রোটোটাইপ পুরো প্রোগ্রাম জুড়ে একই থাকে।

উপসংহার:

'ভার্চুয়াল ফাংশন' এবং 'খাঁটি ভার্চুয়াল ফাংশন' উভয়েরই তার গুরুত্ব রয়েছে, যেমন 'ভার্চুয়াল ফাংশন' হিসাবে, সমস্ত উত্পন্ন শ্রেণীর ভার্চুয়াল ফাংশনটিকে নতুন করে সংজ্ঞায়িত করার প্রয়োজন হয় না এবং যেখানে আমরা চাই যে সমস্ত উদ্ভূত শ্রেণীর ভার্চুয়াল ফাংশনটিকে নতুন সংজ্ঞা দেওয়া উচিত, খাঁটি ভার্চুয়াল ফাংশন সেরা সেখানে প্রযোজ্য।