সি ++ এ ফাংশন ওভারলোডিং এবং ওভাররাইডের মধ্যে পার্থক্য
কন্টেন্ট
তুলনা রেখাচিত্র:- ওভারলোডিং সংজ্ঞা
- সি ++ এ ওভারলোডিং বাস্তবায়ন
- ওভাররাইডিং সংজ্ঞা
- সি ++ এ ওভাররাইডিং এর বাস্তবায়ন
- মিল
- উপসংহার
ইন ‘ওভারলোডিং‘আমরা ওভারলোডেড ফাংশনগুলিকে একই ফাংশনটির নামের সাথে নতুন সংজ্ঞা দিই তবে বিভিন্ন সংখ্যা এবং পরামিতিগুলির ধরণ। ইন ‘অগ্রাহ্য‘ওভাররাইড ফাংশনটির প্রোটোটাইপ পুরো প্রোগ্রাম জুড়ে একই, তবে ওভাররাইড করা ফাংশনটি বেস ক্লাসে‘ ভার্চুয়াল ’মূলশব্দটির আগে হয় এবং কোনও কীওয়ার্ড ছাড়াই ডার্কড ক্লাস দ্বারা পুনরায় সংজ্ঞায়িত হয়।
পলিমারফিজম ওওপির অন্যতম গুরুত্বপূর্ণ বৈশিষ্ট্য। এর সহজ অর্থ "একাধিক ফর্মের জন্য একটি নাম ব্যবহার করা"। ‘ফাংশন ওভারলোডিং’, ‘অপারেটর ওভারলোডিং’ এবং ‘ভার্চুয়াল ফাংশন’ ব্যবহার করে পলিমারফিজম প্রয়োগ করা যেতে পারে। উভয়ই ‘ওভারলোডিং’ এবং ‘ওভাররাইডিং’ বহুবর্ষের ধারণাটিকে বোঝায়। এখানে, ‘ওভারলোডিং’ হ'ল টাইম পলিমারফিজম এবং ‘ওভাররাইডিং’ রান টাইম পলিমারফিজম। আরও অধ্যয়নরত, যদি আমরা ‘ওভারলোডিং’ এবং ‘ওভাররাইডিং’ এর প্রধান পার্থক্য সম্পর্কে কথা বলি।
তদাতিরিক্ত, আমরা তুলনামূলক চার্টের সাহায্যে ওভারলোডিং এবং ওভাররাইডের মধ্যে পার্থক্যটি অধ্যয়ন করি।
- তুলনা রেখাচিত্র
- সংজ্ঞা
- মূল পার্থক্য
- মিল
- উপসংহার
তুলনা রেখাচিত্র:
তুলনা করার জন্য বেস | ওভারলোডিং | উপেক্ষা করা |
---|---|---|
প্রোটোটাইপ | সংখ্যা বা প্যারামিটারের প্রকারের সাথে প্রোটোটাইপ পৃথক হতে পারে। | প্রোটোটাইপের সমস্ত দিক অবশ্যই একই হতে হবে। |
কী খুঁজতে হবে | ওভারলোডিংয়ের সময় কোনও কীওয়ার্ড প্রয়োগ করা হয়নি। | মূল ফাংশনটিতে ভার্চুয়াল দ্বারা কীওয়ার্ডটি ওভাররাইড করা উচিত key |
পার্থক্যের ফ্যাক্টর | পরামিতির সংখ্যা বা প্রকারের পার্থক্য পৃথক করে যা ফাংশনের সংস্করণ বলা হচ্ছে তা নির্ধারণ করে। | কোন শ্রেণীর ক্রিয়াকলাপটিকে পয়েন্টার দ্বারা ডাকা হচ্ছে, তা দ্বারা নির্ধারিত হয়, কোন শ্রেণীর অবজেক্টের ঠিকানা সেই পয়েন্টারের জন্য নির্ধারিত হয়েছে। |
প্যাটার্ন সংজ্ঞায়িত | ফাংশন একই নামের সাথে পুনরায় সংজ্ঞায়িত করা হয় তবে বিভিন্ন সংখ্যা এবং প্যারামিটারের ধরণ। | ফাংশনটি সংজ্ঞায়িত করা হয়, মূল শ্রেণিতে কোনও কীওয়ার্ড ভার্চুয়াল দ্বারা পূর্বে এবং কীওয়ার্ড সহ ডেরাইভেড ক্লাস দ্বারা পুনরায় সংজ্ঞায়িত হয়। |
সাফল্যের সময় | সংকলন সময়। | রান সময়। |
কনস্ট্রাক্টর / ভার্চুয়াল ফাংশন | কনস্ট্রাক্টরদের ওভারলোড করা যায়। | ভার্চুয়াল ফাংশন ওভাররাইড করা যায়। |
বিনাশকারী | ধ্বংসকারীকে ওভারলোড করা যায় না। | ধ্বংসকারীকে ওভাররাইড করা যায়। |
বাঁধাই | ওভারলোডিং প্রারম্ভিক বাঁধাই অর্জন করে। | ওভাররাইডিং দেরী বন্ধনকে বোঝায়। |
ওভারলোডিং সংজ্ঞা
কমপাইল-টাইম পলিমারফিজমকে বলা হয় ‘ওভারলোডিং’ ’বহুপরিবর্তনের ধারণা থেকে ওভারলোডিং উত্পন্ন হওয়ায় এটি" একাধিক পদ্ধতির একটি সাধারণ ইন্টারফেস "সরবরাহ করে। এর অর্থ, কোনও ফাংশন যদি অতিরিক্ত লোড হয় তবে এটি পুনরায় সংজ্ঞায়িত করার সময় এতে একই ফাংশনটির নাম থাকে।
ওভারলোড হওয়া ক্রিয়াকলাপগুলি পৃথক ‘সংখ্যা বা প্যারামিটার (গুলি)’ এর ক্ষেত্রে পৃথক, এটি একটি ওভারলোডেড ফাংশনটিকে অন্যের থেকে আলাদা করে তোলে। এইভাবে, সংকলকটি বুঝতে পারে যে কোন ওভারলোড হওয়া ফাংশনটি ডাকা হচ্ছে। সর্বাধিক সাধারণত ওভারলোড হওয়া ফাংশনগুলি হ'ল 'কনস্ট্রাক্টর'। ‘কপির কন্সট্রাক্টর’ এক ধরণের “কনস্ট্রাক্টর ওভারলোডিং”।
সি ++ এ ওভারলোডিং বাস্তবায়ন
বর্গ ওভারলোড {int a, b; সর্বজনীন: int লোড (int x) {// প্রথম লোড () ফাংশন a = x; ফিরে a; } int লোড (int x, int y) {// সেকেন্ড লোড () ফাংশন a = x; খ = Y; a * b ফিরিয়ে দিন; }}; int main () {ওভারলোড O1; O1.load (20); // প্রথম লোড () ফাংশন কল করুন O1.load (20,40); // দ্বিতীয় লোড () ফাংশন কল}
এখানে ক্লাস ওভারলোডের ফাংশন লোড () ওভারলোড হয়েছে। ক্লাসের দুটি ওভারলোডেড ফাংশন এমনভাবে আলাদা করা যায় যে প্রথম লোড () ফাংশনটি কেবলমাত্র একক পূর্ণসংখ্যা প্যারামিটার গ্রহণ করে, যখন দ্বিতীয় লোড () ফাংশনটি দুটি পূর্ণসংখ্যা পরামিতি গ্রহণ করে। শ্রেণীর ওভারলোডের অবজেক্ট যখন একক প্যারামিটারের সাহায্যে লোড () ফাংশনটিকে কল করে, তখন প্রথম লোড () ফাংশনটি কল করা হবে। যখন বস্তু কল করে লোড () ফাংশন দুটি পরামিতি পেরিয়ে যায়, তখন দ্বিতীয় লোড () ফাংশনটি কল হয়।
ওভাররাইডিং সংজ্ঞা
রান-টাইমের সময় অর্জিত পলিমারফিজমকে বলা হয় ‘ওভাররাইডিং।’ এটি ‘উত্তরাধিকার’ এবং ‘ভার্চুয়াল ফাংশন’ ব্যবহার করে সম্পন্ন হয়। ওভাররাইড করা ফাংশনটি একটি বেস শ্রেণিতে ‘ভার্চুয়াল’ মূলশব্দ দ্বারা চালিত হয় এবং কোনও কীওয়ার্ড ছাড়াই একটি উত্পন্ন শ্রেণিতে পুনরায় সংজ্ঞায়িত হয়।
ওভাররাইডিংয়ের ক্ষেত্রে মনে রাখা সবচেয়ে গুরুত্বপূর্ণ বিষয় হ'ল ওভাররাইডের ক্রিয়াকলাপের প্রোটোটাইপ পরিবর্তন করা উচিত নয় যখন উত্পন্ন শ্রেণি এটির নতুন সংজ্ঞা দেয়। যখন ওভাররাইড ফাংশনকে একটি কল দেওয়া হয়, তখন সি ++ নির্ধারণ করে যে ফাংশনটির কোন সংস্করণটি ‘পয়েন্টার দ্বারা নির্দেশিত বস্তুর ধরণের’ ভিত্তিতে ফাংশন কলিংয়ের মাধ্যমে ডাকা হয়।
সি ++ এ ওভাররাইডিং এর বাস্তবায়ন
ক্লাস বেস {পাবলিক: ভার্চুয়াল শূন্য ফান্ট () base // বেস ক্লাস cout এর ভার্চুয়াল ফাংশন << "এটি একটি বেস ক্লাস ফান্ট ()"; }}; ক্লাস ডারাইভড 1: পাবলিক বেইস {পাবলিক: শূন্য ফান্ট () {// বেস ক্লাসের ভার্চুয়াল ফাংশন ডেরাইভড 1 ক্লাস কাউটে নতুন সংজ্ঞায়িত << "এটি একটি ডেরাইভড 1 ক্লাস ফান্ট ()"; }}; ক্লাস ডারাইভড 2: পাবলিক বেস {পাবলিক: শূন্য ফান্ট () {// বেস ক্লাসের ভার্চুয়াল ফাংশন ডেরাইভড 2 ক্লাস কাউটে নতুন সংজ্ঞায়িত << "এটি একটি ডেরাইভেড 2 ক্লাস ফান্ট ()"; }}; int main () {বেস * পি, বি; উত্পন্ন 1 ডি 1; প্রাপ্ত 2 ডি 2; * পি = & বি; p-> funct (); // বেস ক্লাস ফান্ট কল ()। * পি = & D1; p-> funct (); // ডেরাইভড 1 ক্লাস ফান্ট () এ কল করুন। * পি = & D2; p-> funct (); // কল থেকে ডেরাইভড 2 ক্লাস ফান্ট ()। প্রত্যাবর্তন 0; }
এখানে, একটি একক বেস শ্রেণি রয়েছে যা দুটি প্রকাশিত শ্রেণীর দ্বারা প্রকাশ্যে উত্তরাধিকার সূত্রে প্রাপ্ত। একটি ভার্চুয়াল ফাংশন একটি মূল শ্রেণিতে একটি কীওয়ার্ড ‘ভার্চুয়াল’ দিয়ে সংজ্ঞায়িত করা হয় এবং এটি কোনও কীওয়ার্ড ছাড়াই প্রাপ্ত উভয় শ্রেণীর দ্বারা পুনরায় সংজ্ঞায়িত করা হয়। মূলত (), বেস শ্রেণিটি একটি পয়েন্টার ভেরিয়েবল ‘পি’ এবং একটি বস্তু ‘বি’ তৈরি করে; ‘ডাইরভেডড 1’ শ্রেণি একটি অবজেক্ট ডি 1 তৈরি করে এবং উত্পন্ন 2 শ্রেণি একটি বস্তু ডি 2 তৈরি করে।
এখন, প্রাথমিকভাবে বেস শ্রেণীর অবজেক্ট ‘বি’ এর ঠিকানাটি বেস শ্রেণীর পয়েন্টার ‘পি’ -কে দেওয়া হয়েছে। ‘পি’ ফাংশন ফান্ট () এ কল দেয়, সুতরাং বেস শ্রেণীর একটি ফাংশন বলা হয়।তারপরে উত্পন্ন1 শ্রেণীর অবজেক্ট ‘ডি 1’ এর ঠিকানা পয়েন্টারকে ‘পি’ বরাদ্দ করা হয়েছে, আবার এটি ফান্টকে কল দেয় (); এখানে ডেরিভড 1 ক্লাসের ফাংশন ফান্ট () কার্যকর করা হয়। পরিশেষে, পয়েন্টার ‘পি’ ডিভাইসড 2 শ্রেণীর অবজেক্টের জন্য বরাদ্দ করা হয়। তারপরে ‘পি’ কল করে ফাংশন ফান্ট () যা ডেরাইভড 2 শ্রেণির ফাংশন ফান্ট () চালায়।
যদি ডারাইভেড 1 / ডারভেডড 2 ক্লাসটি ফান্ট () এর নতুন সংজ্ঞা দেয় না, তবে ভার্চুয়াল ফাংশনটি ‘শ্রেণিবদ্ধ’ বলে বেস ক্লাসের ফান্ট () বলা হত।
- ওভারলোড হওয়া ফাংশনটির প্রোটোটাইপ ওভারলোড হওয়া ফাংশনে পাস হওয়া পরামিতিগুলির ধরণ এবং সংখ্যার কারণে পৃথক হয়। অন্যদিকে, ওভাররাইড ফাংশনটির প্রোটোটাইপ পরিবর্তিত হয় না কারণ একটি ওভাররাইড ফাংশনটি বিভিন্ন শ্রেণীর জন্য বিভিন্ন ক্রিয়া সম্পাদন করে তবে এটি একই ধরণের এবং পরামিতির সংখ্যা সহ perform
- ওভারলোডেড ফাংশনটির নামটি কোনও কীওয়ার্ডের আগে চলে না, তবে কেবল বেস ক্লাসে "ভার্চুয়াল" কীবোর্ডের সাথে একটি ওভাররাইড ফাংশনটির নাম রয়েছে।
- কোন ওভারলোড হওয়া ক্রিয়াকলাপটি ফাংশনে পাস হওয়া পরামিতিগুলির ধরণ বা সংখ্যার উপর নির্ভর করে। কোন শ্রেণীর প্রার্থনা করা হবে তার ওভাররাইড ফাংশন নির্ভর করে, কোন শ্রেণীর অবজেক্টের ঠিকানা পয়েন্টারটিতে নির্ধারিত হয়েছে, যা ফাংশনটি চালিত করেছিল।
- কোন ওভারলোড হওয়া ক্রিয়াকলাপটি সঙ্কলনের সময় সমাধান করা হয়। কোন ওভাররাইড করা ফাংশনটি চাওয়া হবে তা রানটাইমের সময় সমাধান করা হয়।
- কনস্ট্রাক্টরদের ওভারলোড করা যায় তবে ওভাররাইড করা যায় না।
- ধ্বংসকারীদের ওভারলোড করা যায় না, তবে সেগুলি ওভাররাইড করা যায়।
- ওভারলোডিং প্রারম্ভিক বাঁধাই অর্জন করে কারণ ওভারলোড হওয়া ক্রিয়াকলাপটি সঙ্কলনের সময় সমাধান করা হবে। ওভাররাইডিং দেরিতে বাইন্ডিং অর্জন করে কারণ ওভাররাইড করা ফাংশনটি অনুরোধ করা হবে রানটাইমের সময় সমাধান করা হবে।
মিল
- উভয়ই একটি শ্রেণীর সদস্য ফাংশনে প্রয়োগ করা হয়।
- পলিমারফিজম হল তাদের উভয়ের পেছনের মূল ধারণা।
- আমরা ফাংশনগুলিতে ওভারলোডিং এবং ওভাররাইডিংয়ের সময় ফাংশনটির নাম একই থাকে।
উপসংহার
ওভারলোডিং এবং ওভাররাইডিং একইরকম প্রদর্শিত হয়, তবে এটি এমন নয়। ক্রিয়াকলাপগুলি ওভারলোড হওয়া যাবে তবে, কোনও শ্রেণি ভবিষ্যতে ওভারলোড হওয়া ক্রিয়াকে নতুন করে সংজ্ঞায়িত করতে পারে না। ভার্চুয়াল ফাংশন ওভারলোড করা যায় না; সেগুলি কেবল ওভাররাইড করা যায়।