এই পোস্টে, আমরা সি++-এ ফাংশন ওভারলোডিং (Function Overloading) এবং ফাংশন ওভাররাইডিং (Function Overriding)-এর মধ্যে পার্থক্য বুঝব।
ওভারলোডিং (Overloading)
- ওভারলোডিং-এর সময় কোনো কীওয়ার্ড ব্যবহার করা হয় না।
- প্রোটোটাইপ শুধু প্যারামিটারের সংখ্যা বা টাইপের উপর ভিত্তি করে ভিন্ন হয়।
- এটি কম্পাইল টাইমে ঘটে।
- কনস্ট্রাক্টর ওভারলোড করা যায়।
- ডিস্ট্রাক্টর ওভারলোড করা যায় না।
- এটি আর্লি বাইনডিং (early binding) অর্জনে সাহায্য করে।
- কল করা ফাংশনের ভার্সন প্যারামিটারের সংখ্যা বা টাইপ দ্বারা নির্ধারিত হয়।
- ফাংশনগুলো একই নাম지만 ভিন্ন সংখ্যা বা টাইপের প্যারামিটার দিয়ে পুনরায় ডিফাইন করা হয়।
ওভাররাইডিং (Overriding)
- প্রোটোটাইপ সব সময় একই থাকে।
- এটি রানটাইমে ঘটে।
- ভার্চুয়াল ফাংশন ওভাররাইড করা যায় না।
- ডিস্ট্রাক্টর ওভাররাইড করা যায়।
- ওভাররাইডিংকে লেট বাইনডিং (late binding) ও বলা হয়।
- বেস ক্লাসে ওভাররাইড হওয়া ফাংশনটি 'virtual' কীওয়ার্ড দিয়ে চিহ্নিত করা হয়।
- ক্লাসের অবজেক্টের অ্যাড্রেস পয়েন্টারে এসাইন করা হয়, যার ফাংশনটি পয়েন্টার দ্বারা কল করা হয়।
- ফাংশন ডিফাইন করার সময় বেস ক্লাসে 'virtual' কীওয়ার্ড থাকে।
- একই ফাংশন ডেরাইভড ক্লাসে 'override' কীওয়ার্ড দিয়ে পুনরায় ডিফাইন করা হয়।