Yes, you can overload member functions based on whether the object they're called on is const
or not. This is a powerful feature in C++ that allows you to have different behaviors for const
and non-const
 objects.
When you declare a member function as const
, it promises not to modify the object's state. You can then overload the function with a non-const
version, which is allowed to modify the object.
Here's an example:
#include <iostream>
class MyClass {
public:
void Print() const {
std::cout << "Const version\n";
}
void Print() {
std::cout << "Non-const version\n";
}
};
int main() {
MyClass obj;
const MyClass cobj;
obj.Print();// calls non-const version
cobj.Print();// calls const version
}
Non-const version
Const version
In this code, the MyClass
has two overloads of the Print
function: one const
, and one non-const
.
When we call Print
on a non-const
object obj
, it calls the non-const
version. When we call Print
on a const
object cobj
, it calls the const
 version.
This allows you to have different implementations for const
and non-const
objects. The const
version might only read the object's state, while the non-const
version might modify it.
This overloading based on const
-ness is resolved at compile time, based on the static type of the object. It's a different mechanism from virtual
functions, which are resolved at runtime based on the dynamic type of the object.
Answers to questions are automatically generated and may not have been reviewed.
Learn how the compiler decides which function to call based on the arguments we provide.