C++-এ const মেম্বার ফাংশন ও নন-const মেম্বার ফাংশন একই নামে ওভারলোড করা যায়। কোনটি কল হবে তা অবজেক্টের const-নেস (const-ness) উপর নির্ভর করে।
উদাহরণ ১: অবজেক্টের const-ness অনুযায়ী কল
#include <iostream>
using namespace std;
class MyClass {
public:
void my_func() const { cout << "Const function called" << endl; }
void my_func() { cout << "Non-const function called" << endl; }
};
int main() {
MyClass obj;
const MyClass obj_c;
obj.my_func(); // Non-const version
obj_c.my_func(); // Const version
return 0;
}
আউটপুট
Non-const function called Const function called
উদাহরণ ২: প্যারামিটারে const (এরর)
প্যারামিটারে শুধু const দিয়ে ওভারলোড করা যায় না (টাইপ একই মনে হয়)।
void my_func(const int x) { ... }
void my_func(int x) { ... } // Error: cannot overload
উদাহরণ ৩: পয়েন্টার/রেফারেন্সে const (ওভারলোড সম্ভব)
void my_func(const int* x) { cout << "Const pointer" << endl; }
void my_func(int* x) { cout << "Non-const pointer" << endl; }
int main() {
int x = 10;
my_func(&x); // Non-const version called
return 0;
}
আউটপুট
Non-const function called
নিয়ম: const কোভালেন্স (cv-qualifiers) শুধু পয়েন্টার/রেফারেন্সের পয়েন্ট-টু টাইপে বা মেম্বার ফাংশনের *this পয়েন্টারে ওভারলোডিংয়ে অর্থ বহন করে।