2013-08-30 14 views
6

Aus Gründen der Klarheit Lassen Sie meine neue Klasse gebaut:C++ - Umwandlung von benutzerdefinierten Klassen in Typen

lassen Sie uns sagen, dass ich zu definieren, in der Lage sein wollen:

MyInt Three(30); 
int thirty = Three; 

Aber in um dieses Ergebnis zu erhalten, ich schreibe:

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

wie kann ich die automatische Konvertierung von meiner benutzerdefinierten Klasse eines integrierten Typ bekommen?

+2

Bemerkung: es ist in der Regel ein _bösen idea_ _both_ Konvertierungen _implicit_ (hier 'int'->' MyInt' über den nicht-expliziten Konstruktor haben _and_ 'MyInt'-> 'int' über einen Konvertierungsoperator). (Betrachten wir zum Beispiel 'std :: string', für das es eine implizite Umwandlung _von_' const char * '(Konvertierungskonstruktor) gibt, aber nicht _to_' const char * '(hierfür müssen Sie' .c_str() 'oder aufrufen Verwandte Member-Funktionen).) [Auch, typo: 'private' ->' private: '] –

Antwort

14

Mit einer Typkonvertierungsfunktion:

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

Gerade versucht, clang ++, es funktioniert! –

+4

Mit der zusätzlichen Notiz, dass dies transparent sein sollte. Das heißt, wenn Sie in ein "int" konvertieren, sollte die Klasse eine numerische Klasse sein und nicht eine benutzerdefinierte Klasse, die etwas völlig anderes tut. –

+3

Es sollte 'const' sein (aber' operator + 'auch, wenn nicht eine Nichtmitgliedsfunktion), und sollte wahrscheinlich '10 * theInt' zurückgeben, entsprechend der Seltsamkeit von OP. –

Verwandte Themen