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

 

posted on 2016-04-20 00:22  openxxs  阅读(1167)  评论(0编辑  收藏  举报

导航