2010-02-10 20 views
12

Ho il seguente codice in una classe:cosa fa l'operatore string() {qualche codice}?

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

e voleva sapere che cosa questo operatore fa.

mi è familiare con i soliti operatori di stringa:

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; 

... ma non questo?

risposta

29
operator Type() { ... } 

è il (implicito) operatore di conversione. Ad esempio, se la classe Animal implementa operator string(), quindi il codice

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

diventerà qualcosa di simile

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

Vedere http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr385.htm per qualche altro esempio.

+1

+1 per riferirsi ad esso con il proprio nome, operatore di conversione. –

+0

Un buon esempio è l'usato 'operator bool() {...}' che permette ad un oggetto del tipo di essere usato in 'if (oggetto) {...} else {...}' che per esempio nei tipi di contenitori potrebbe essere implementato nel senso che significa essere non vuoto. – wich

+0

@wich: 'operator bool' può darti un comportamento inaspettato http://stackoverflow.com/questions/2145931/why-is-operator-bool-invoked-when-i-cast-to-long. – kennytm

1

Se appena restituisce una stringa rappresentantation dell'oggetto corrente, ad es. per stamparlo sulla console.

+1

In particolare, è un operatore di conversione per la conversione in "stringa". Puoi creare operatori di conversione anche per altri tipi di targeting. –

7

Sta sovraccaricando l'operatore di trasmissione. Una classe che ha la funzione

operator string(); 

definito può essere eseguito su una stringa.

+1

non ha niente a che fare con il casting, è la conversione del tipo, quello che può accadere a causa di un cast è un'altra questione. – wich

-2

Questo sembrerebbe essere un operatore cast-to-string per un tipo di numero decimale.

1

È un operatore di conversione di tipo automatico. Questo corso di cui si sta parlando può essere implicitamente convertito in una stringa. Questo link potrebbe aiutarti con qualche altro esempio.

+0

Il collegamento (http://www.codeguru.com/cpp/tic/tic0131.shtml) non funziona. – dpatru