C++中class的类型转换重载
注:本文测试实例使用的编译器版本为clang-703.0.29。
我们已经习惯了基本数据类型的显式或隐示转换,如:
int a = 10; float f = (float)a;
float c = a;
其实通过operator的使用,class也可以达到任意类型的显式或隐式转换的效果,如:
#include <cstdlib> #include <cstdio> using namespace std; struct A { char a; }; class B { public: char b; }; class C { private: A _a; B _b; public: char c; operator A() { return _a; } operator B() { return _b; } }; int main() { C c; c.c = 'c'; A a1 = (A)c; A a2 = c; B b1 = (B)c; B b2 = c; a1.a = 'a'; a2.a = 'a'; b1.b = 'b'; b2.b = 'b'; printf("a1.a: %c\na2.a: %c\nb1.b: %c\nb2.b: %c\nc.c: %c\n", a1.a, a2.a, b1.b, b2.b, c.c); return 0; }
上面这段小程序的输出结果为:
a1.a: a
a2.a: a
b1.b: b
b2.b: b
c.c: c