Question:
In MFC, what does the following declaration do?
CPen::operator HPEN() const;
My understanding of the operator keyword is that you cannot use it to create a new operator; however, this statement seems to declare HPEN() as an operator member of the CPen class.
Answer:
Not exactly. The word ‘operator’ in this case doesn’t overload a built-in operator but rather, it defines a conversion operator that converts an instance of class CPen into HPEN in a context that needs an HPEN object, for example:
void f(const HPEN & p);void g(){ CPen pen; f(pen); // pen is implicitly converted to HPEN}
Note that unlike ordinary overloaded operators, a conversion operator declaration doesn’t have a return type (not even void) because the return type is deduced from the type to which the object is converted. In other words, the implied return type in this case is HPEN. The conversion is automatic. You don’t call any member function for it to happen.