当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
2015年计算机等级考试二级C++辅导讲义(8)
发布时间:2012/5/17 16:52:32 来源:城市网学院 编辑:ziteng
  -
  C++重载类型转换操作符(type cast operator)
  boost::ref和boost::cref使用了重载“类型转换(type cast)”操作符来实现使用引用类型来替换模版参数,本文就介绍一下这种操作符的重载方法。
  函数原型
  T1::operator T2() [const];   //T1的成员函数,重载"(T2)a"操作符
  1. 类型转换重载函数的返回值是隐含的,并且不能显示声明,返回值是与转换的类型相同的,即为上面原型中的T2。
  2. 不能有参数;
  3. 支持继承,可以为虚函数;
  4. 支持使用typedef定义的类型;
  先通过一个简单的例子来说明如何使用类型转换重载
  1 #include
  2
  3 class D {
  4 public:
  5 D(double d) : d_(d) {}
  6
  7 /* 重载“(int)D” */
  8 operator int() const {
  9 std::cout << "(int)d called!" << std::endl;
  10 return static_cast(d_);
  11 }
  12
  13 private:
  14 double d_;
  15 };
  16
  17 int add(int a, int b) {
  18 return a + b;
  19 }
  20
  21 int main() {
  22 D d1 = 1.1;
  23 D d2 = 2.2;
  24 std::cout << add(d1, d2) << std::endl;
  25
  26 return 0;
  27 }
  28
  29
  类型转换操作符 vs 类型转换构造函数(conversion constructor)
  有时候使用conversion constructor就能实现类型转换,这种方式效率更高而且也更直观,下面举例说明:
  1 #include
  2
  3 class A
  4 {
  5 public:
  6 A(int num = 0) : dat(num) {}
  7
  8 /* 重载"(int)a" */
  9 operator int() { return dat; }
  10
  11 private:
  12 int dat;
  13 };
  14
  15
  16 class X
  17 {
  18 public:
  19 X(int num = 0) : dat(num) {}
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved