Suppose you are writing a method in a class that accepts a parameter of a given type. Such a method can also be called with an argument of a different typeas long as an implicit conversion exists between the two types (for example, short to int).
class example
{
public:
void method(int parameter);
...
}
int main()
{
example eg;
short pants = 42;
eg.method(pants); // short to int conversion here
...
return 0;
}
It is possible to overload such methods, and by making the overloaded method private, unwanted conversions can be turned into compile time errors. For example:
class example
{
public:
void method(int parameter);
..
private: // reject unwanted conversions
void method(short);
...
}
int main()
{
example eg;
short pants = 42;
eg.method(pants); // Compile time error
...
return 0;
}
You can even use this technique to overload on different signedness of integers. For example:
namespace non_std
{
class string
{
public:
char & operator[](size_t index);
const char & operator[](size_t index) const;
..
private: // reject unwanted conversions
void operator[](signed int);
void operator[](signed int) const;
...
};
}