কম্পিউটার টিউটোরিয়াল

C++-এ বেস ক্লাসের ওভারলোডেড মেথড হাইডিং

C++-এ যদি বেস ক্লাসে একই নামে একাধিক ওভারলোডেড ফাংশন থাকে, এবং ডেরাইভড ক্লাসে 그중 যেকোনো একটি রিডিফাইন করা হয়, তবে বেস ক্লাসের সব ওভারলোডেড ভার্সন ডেরাইভড ক্লাস থেকে হাইড (লুকানো) হয়ে যায়। এটি "name hiding" নামে পরিচিত।

উদাহরণ

#include <iostream>
using namespace std;

class MyBaseClass {
public:
    void my_function() { cout << "Base: no args" << endl; }
    void my_function(int x) { cout << "Base: int arg" << endl; }
};

class MyDerivedClass : public MyBaseClass {
public:
    void my_function() { cout << "Derived: no args" << endl; } // শুধু এইটিই রিডিফাইন
};

int main() {
    MyDerivedClass ob;
    ob.my_function(10); // কম্পাইল এরর!
    return 0;
}

আউটপুট (কম্পাইল এরর)

[Error] no matching function for call to 'MyDerivedClass::my_function(int)'
[Note] candidate: void MyDerivedClass::my_function() expects 0 arguments, 1 provided

সমাধান

বেস ক্লাসের ওভারলোডগুলো ডেরাইভড ক্লাসে আনার জন্য using ডিক্লেরেশন ব্যবহার করুন:

class MyDerivedClass : public MyBaseClass {
public:
    using MyBaseClass::my_function; // বেসের সব ওভারলোড আনা হয়
    void my_function() { cout << "Derived: no args" << endl; }
};

নোট: এটি C++-এর নাম লুকানো নিয়ম (name hiding rules) এর ফলাফল। জাভা/সি#-এ এই আচরণ ভিন্ন।

  1. C++-এ স্ট্রাকচার vs ক্লাস (Structure vs class in C++)

  2. C++-এ বেস ও ডেরাইভড ক্লাস এক্সেপশন ক্যাচ করা

  3. C++-এ প্যারেন্ট ক্লাস থেকে কী কী ইনহেরিট হয়?

  4. C++-এ লোকাল ক্লাস