সি ++ এ ফাংশন ওভারলোডিং: আপনার যা জানা দরকার All



এই নিবন্ধটি আপনাকে বোঝার জন্য প্রচুর উদাহরণ সহ সি ++ এ ফাংশন ওভারলোডিংয়ের একটি বিশদ এবং ব্যাপক জ্ঞান সরবরাহ করবে।

সি ++ হ'ল সেই প্রোগ্রামিং ভাষাগুলির মধ্যে একটি যা খুব নমনীয় এবং এতে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের বেশ কয়েকটি বৈশিষ্ট্যও রয়েছে। ওভারলোডিং এই প্রোগ্রামিং ভাষার আরও একটি বৈশিষ্ট্য।নিম্নলিখিত পয়েন্টারগুলি এই 'সি ++ এ ফাংশন ওভারলোডিং' নিবন্ধে কভার করা হবে-

সি ++ ওভারলোডিং

আমরা যখন একই ক্লাসের দুটি বা ততোধিক সদস্য তৈরি করি তবে সংখ্যা বা প্যারামিটারের চেয়ে আলাদা হয়, তখন এটি সি ++ ওভারলোডিং হিসাবে পরিচিত। সি ++ এ আমরা ওভারলোড করতে পারি:





  • পদ্ধতি,
  • কনস্ট্রাক্টর, এবং
  • সূচকযুক্ত বৈশিষ্ট্য

সি ++ এ ওভারলোডিংয়ের প্রকারগুলি

types-of-overloading-in-c++

সি ++ এ ফাংশন ওভারলোডিং কী?

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



ফাংশন ওভারলোডিংয়ের একটি বড় সুবিধা হ'ল এটি প্রোগ্রামের পঠনযোগ্যতা বৃদ্ধি করে কারণ আমাদের একই ক্রিয়াটির জন্য বারবার বিভিন্ন নাম ব্যবহার করার দরকার নেই।

যুক্তি সংখ্যা পরিবর্তন করে

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

// প্রথম ফাংশন সংজ্ঞা ইন্ট অ্যাড (ইন এ, ইনট বি) {কোট<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

এখানে অ্যাড () ফাংশনটি অতিরিক্ত বোঝা হিসাবে বলা হয়, কারণ এর দুটি সংজ্ঞা রয়েছে, একটি যা দুটি যুক্তি গ্রহণ করে এবং অন্যটি তিনটি যুক্তি গ্রহণ করে। কোন যুক্ত () ফাংশনটি ডাকা হবে, আর্গুমেন্টের সংখ্যার উপর নির্ভর করে।



int main () {add (10, 20) // add () 2 প্যারামিটার সহ বলা হবে (10, 20, 30) // যোগফল (3 পরামিতি সহ) বলা হবে}
# নেমস্পেসটি স্টডি ইনট অ্যাড (ইন্ট এ, ইনট বি) out কোট ব্যবহার করে অন্তর্ভুক্ত করুন<< a+b <

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

বিভিন্ন ধরণের আর্গুমেন্ট থাকার মাধ্যমে

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

# নেমস্পেস ব্যবহার করে std int যোগ করুন (int x, int y) // প্রথম সংজ্ঞা {cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

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

সি ++ এ ফাংশন ওভারলোডিংয়ের সুবিধা

  • আমরা আমাদের প্রোগ্রামের মেমরির স্থান, ধারাবাহিকতা এবং পঠনযোগ্যতা সংরক্ষণ করতে ফাংশন ওভারলোডিং ব্যবহার করি।

  • ব্যবহার ফাংশন ওভারলোডিং ধারণা সহ, আমরা একই নামে একাধিক ফাংশন বিকাশ করতে পারি

  • ফাংশন ওভারলোডিং পলিমারফিজমের আচরণ দেখায় যা আমাদের বিভিন্ন আচরণ পেতে দেয়, যদিও ফাংশনের একই নাম ব্যবহার করে কিছু লিঙ্ক থাকবে।

  • ফাংশন ওভারলোডিং প্রোগ্রামটি কার্যকর করার গতি বাড়ায়।

  • ফাংশন ওভারলোডিং কোড পুনর্ব্যবহারযোগ্যতার জন্য এবং মেমরি সঞ্চয় করতে ব্যবহৃত হয়।

  • এটি প্যারামিটারের ধরণের ভিত্তিতে শ্রেণি পদ্ধতি লোড করতে অ্যাপ্লিকেশনটিকে সহায়তা করে।

  • কোড রক্ষণাবেক্ষণ করা সহজ।

সি ++ এ ফাংশন ওভারলোডিংয়ের অসুবিধা

  • ফাংশন ঘোষণাগুলি যা কেবল তার ফেরতের প্রকারের দ্বারা পৃথক হয় ফাংশন ওভারলোডিং প্রক্রিয়া দিয়ে ওভারলোড করা যায় না।
  • একই পরামিতি বা একই নামের ধরণের সদস্য ফাংশন ঘোষণাগুলি যদি কোনও স্ট্যাটিক সদস্য ফাংশন হিসাবে ঘোষিত হয় তবে ওভারলোড করা যাবে না।
  • XYZ শ্রেণি {স্ট্যাটিক শূন্য ফানক () শূন্য ফান () // ত্রুটি}

ফাংশন ওভারলোডিং এবং দ্ব্যর্থতা

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

  • রূপান্তর টাইপ করুন।
  • ডিফল্ট আর্গুমেন্ট সহ ফাংশন।
  • রেফারেন্স দ্বারা একটি পাস সঙ্গে ফাংশন

প্রকার রূপান্তর:

# নেমস্পেস ব্যবহার করে স্ট্যান্ড শূন্য ফাংশন (ফ্লোট) শূন্য ফাংশন (ইনট) শূন্য ফাংশন (ফ্লোট এক্স) {স্টাড :: কোট ব্যবহার করুন<< 'Value of x is : ' <

উপরের উদাহরণটিতে একটি ত্রুটি ছুঁড়েছে - 'ওভারলোডেড ফাংশন (ডাবল) এর কল' অস্পষ্ট '। ফাংশন (3.4) প্রথম ফাংশন কল করবে। ফাংশন (34) আমাদের পূর্বাভাস অনুযায়ী দ্বিতীয় ফাংশন কল করে। তবে এটি হ'ল না কারণ সি ++ তে সমস্ত ভাসমান-পয়েন্ট ধ্রুবককে একটি ফ্লোট হিসাবে নয় ডাবল হিসাবে ধরা হয়। আমরা যদি ফ্লোট ভেরিয়েবলটিকে একটি ডাবল ভেরিয়েবলে প্রতিস্থাপন করি তবে প্রোগ্রামটি ঠিকঠাক কাজ করবে। অতএব আমরা এটিকে এক ধরণের রূপান্তর ত্রুটি থেকে ভাসা থেকে ডাবল বলি।

ডিফল্ট তর্কগুলি সহ ফাংশন:

# নেমস্পেস ব্যবহার করে স্ট্যান্ড শূন্য ফাংশন (ইনট) শূন্য ফাংশন (ইনট, ইনট) শূন্য ফাংশন (ইনট এক্স) {স্টেড :: কোট<< 'Value of x is : ' <

উপরোক্ত উদাহরণটি 'ওভারলোডেড মজা (মজাদার) এর কল' অস্পষ্ট 'বলে একটি ত্রুটি দেয়, এটি কারণ ফাংশন (int y, int z = 12) দুটি উপায়ে কল করা যেতে পারে:

জাভাতে একটি স্ট্রস্ট্রিং কী?
  1. একটি যুক্তি দিয়ে ফাংশনটি কল করে (এবং এটি স্বয়ংক্রিয়ভাবে z = 12 এর মান গ্রহণ করবে)
  2. দুটি যুক্তি দিয়ে ফাংশনটি কল করে।

যখন আমরা ফাংশনটি কল করি: ফাংশন (12) আমরা ফাংশন (ইনট) এবং ফাংশন (ইনট, ইনট) উভয়টির শর্ত পূরণ করি এইভাবে সংকলকটি একটি অস্পষ্টতার মধ্যে যায় একটি ত্রুটি দেখায়।

রেফারেন্স দ্বারা পাস সহ ফাংশন

# নেমস্পেস ব্যবহার করে স্ট্যান্ড শূন্য ফাংশন (ইনট) শূন্য ফাংশন (ইন্ট ও) শূন্য ফাংশন (ইন্ট এ) {স্টেড :: কোট<< 'Value of a is : ' < 

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

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

আমাদের জন্য একটি প্রশ্ন আছে? দয়া করে এই ব্লগের মন্তব্য বিভাগে এটি উল্লেখ করুন এবং আমরা যত তাড়াতাড়ি সম্ভব আপনার কাছে ফিরে আসব।