2010-02-10 9 views
12

Tengo el siguiente código en una clase:¿qué hace el operador string() {some code} do?

operator string() { 
     return format("CN(%d)", _fd); 
} 

y quería saber lo que este operador.

estoy familiarizado con los operadores de cadenas habituales:

bool operator==(const string& c1, const string& c2); 
bool operator!=(const string& c1, const string& c2); 
bool operator<(const string& c1, const string& c2); 
bool operator>(const string& c1, const string& c2); 
bool operator<=(const string& c1, const string& c2); 
bool operator>=(const string& c1, const string& c2); 
string operator+(const string& s1, const string& s2); 
string operator+(const Char* s, const string& s2); 
string operator+(Char c, const string& s2); 
string operator+(const string& s1, const Char* s); 
string operator+(const string& s1, Char c); 
string& operator+=(const string& append); 
string& operator+=(const Char* append); 
string& operator+=(const Char append); 
ostream& operator<<(ostream& os, const string& s); 
istream& operator>>(istream& is, string& s); 
string& operator=(const string& s); 
string& operator=(const Char* s); 
string& operator=(Char ch); 
Char& operator[](size_type index); 
const Char& operator[](size_type index) const; 

... pero no ésta?

Respuesta

29
operator Type() { ... } 

es la (implícita) operador de conversión. Por ejemplo, si la clase implementa Animaloperator string(), a continuación, el código

Animal a; 
... 
do_something_with ((string)a); 

se convertirán en algo así como

do_something_with ((Animal::operator string)(&a)); 

Ver http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr385.htm para algunos ejemplos más.

+1

+1 para referirse a él por su nombre propio, operador de conversión. –

+0

Un buen ejemplo es el frecuentemente utilizado 'operator bool() {...}' que permite que un objeto del tipo sea usado en 'if (object) {...} else {...}' que por ejemplo en los tipos de contenedor podría implementarse como verdadero para no estar vacío. – wich

+0

@wich: 'operator bool' puede darle un comportamiento inesperado http://stackoverflow.com/questions/2145931/why-is-operator-bool-invoked-when-i-cast-to-long. – kennytm

1

Si solo devuelve una represantación de cadena de su objeto actual, p. para imprimirlo en la consola.

+1

Más específicamente, es un operador de conversión para convertir el tipo 'cadena'. También puede crear operadores de conversión que se dirijan a otros tipos. –

7

Está sobrecargando el operador de reparto. Una clase que tiene la función

operator string(); 

definida se puede convertir en una cadena.

+1

no tiene nada que ver con el casting, es la conversión de tipo, que eso puede suceder debido a un reparto es otra cuestión. – wich

-2

Parece ser un operador de fundido a cuerda para un tipo de número decimal.

1

Es un operador de conversión de tipo automático. Esta clase de la que está hablando puede convertirse implícitamente en una cadena. Este link podría ayudarlo con algunos ejemplos más.

+0

El enlace (http://www.codeguru.com/cpp/tic/tic0131.shtml) no funciona. – dpatru