2013-08-30 11 views
6

Per motivi di chiarezza Che la mia nuova classe sia:C++ - La conversione da classi personalizzate a costruito nel tipi

diciamo che voglio essere in grado di definire:

MyInt Three(30); 
int thirty = Three; 

Ma in per ottenere questo risultato che sto scrivendo:

MyInt Three(30); 
int thirty = Three + 0; 

come posso ottenere la conversione automatica dalla mia classe personalizzata ad un tipo built-in?

+2

Nota: di solito è un idea_ _bad avere _both_ conversioni _implicit_ (qui 'int'->' MyInt' tramite il costruttore non esplicito _and_ 'MyInt'-> 'int' tramite un operatore di conversione). (Si consideri ad esempio 'std :: string', per il quale esiste una conversione implicita _from_' const char * '(costruttore di conversione) ma non _to_' const char * '(per questo è necessario chiamare' .c_str() 'oppure relative funzioni membro).) [Inoltre, typo: 'private' ->' private: '] –

risposta

14

Con una funzione di conversione del tipo:

class MyInt{ 
    public: 
     MyInt(int x){theInt = x /10;} 
     int operator+(int x){return 10 * theInt + x;} 

     operator int() const { return theInt; } // <-- 

    private 
     int theInt; 
}; 
+0

Appena provato clang ++, funziona! –

+4

Con la nota aggiunta che fare ciò dovrebbe essere trasparente. Cioè, se stai convertendo in un 'int', la classe dovrebbe essere una classe numerica e non una classe personalizzata che faccia qualcosa di totalmente non correlato. –

+3

Dovrebbe essere 'const' (ma anche' operator +', se non è una funzione non membro), e dovrebbe probabilmente restituire '10 * theInt' secondo la stranezza di OP. –