Ich habe eine Klasse, deren einzige Datenelement eine 32-Bit-Ganzzahl ohne Vorzeichen ist. Das heißt, sieht die Klasse wie folgt:Umwandlung von einer const benutzerdefinierten Klasse in einen eingebauten Typ in C++
class A {
protected:
unsigned int bits;
/* ... some methods ... */
public:
/* ... some methods ... */
};
Aber ich will es auch in der Lage sein, implizit zu und von 32-Bit-Integer ohne Vorzeichen zu konvertieren. So habe ich in einem Copy-Konstruktor sowie ein Casting-Operator:
class A {
protected:
unsigned int bits;
/* ... some methods ... */
public:
A(): bits(0) {} // default constructor
A(const unsigned int i): bits(i) {} // convert from unsigned int to A
operator unsigned int() { return bits; } // convert from A to unsigned int
/* ... some methods ... */
};
So, jetzt zum Beispiel, kann ich die folgenden Dinge tun:
int main() {
// default constructor
A a0 = A();
// convert from unsigned int
A a1 = 1 + 2;
// conversions between the two types:
unsigned int result = (a0 & a1 + 5)/2;
}
aber ich bin zu kämpfen, um es zu arbeiten mit const
Typen. Insbesondere arbeiten die folgenden nicht:
int main() {
const A a = 5; // works
unsigned int i = a; // compiletime error
}
Er sagt: „Keine geeignete Konvertierungsfunktion von‚const A‘bis‚unsigned int‘existiert.“. Ich verwende Visual Studio 2010 mit dem Standardcompiler von Microsoft.
Welche Konvertierungsfunktion muss ich erstellen, damit sie ordnungsgemäß funktioniert?
Re: "Aber ich will es auch in der Lage sein, zu und von 32 Bit vorzeichenlosen Ganzzahlen implizit zu konvertieren." Sei vorsichtig mit dem was du verlangst. Implizite Conversions werden Sie in den Hintergrund drängen, wenn Sie es am wenigsten erwarten, und erfahrene C++ - Programmierer vermeiden es oft, implizite Conversions in ihren Klassen zuzulassen, außer in nur wenigen Fällen. Welchen Vorteil haben Sie, wenn Sie diese Art von impliziter Konvertierung für Klasse A zulassen? –
@Insilico: Cleanerer Code, da ich nicht überall Castes schreiben muss, wenn ich Operationen an den Bits durchführe. – Cam
Und öffentliche Methoden oder Operatorüberladung zu implementieren, um diese Bit-Operationen sind nicht ausreichend? –