Hi Everybody,
I'm writing a String class for a school assignment.
The String class is supposed to include a char* pCh pointer to a character array to store the actual string, this is OK.

Then the teacher asked us to include an operator overloading for char* so that every time the compiler can treat a String object as a character pointer it would get access to the char* pCh pointer in the object... other than feeling this breaks encapsulation, I believe it's OK... after all he is the teacher.

This is my implementation of that:
Code:
String :: operator char*() const
{
    return pCh;    
}
The problem arises when the teacher asks us to include another operator overload, this time for the [] operator... as to provide direct access to each of the strings characters... again... encapsulation issues, but that's not the problem...

This is my implementation if THAT:
Code:
char& String :: operator[](unsigned int i) const
{
    if(i >= length)
        abort();
    return pCh[i];
}
Everything seems fine so far?

The problem is that when trying to actually test my program, the compiler doesn't know what to do... should it first use the operator char* overload on the String and then treat the following [i] the same way any pointer can be accessed (e.g. int* p; int a = p[3]; ) or use my operator[](usigned int i) and correctly return a reference to a character???

Code:
String a("Ambiguity!");
char m = a[1]; 

/*
supposed to make char m contain the actual 'm' character in position 1 in string a
*/
How do I tell the compiler that I mean the operator[]? Is there a way to set a presedence order telling the compiler that in the case that a string object is followed by [i] use the correct operator overloading function?