参考:http://www.weixueyuan.net/view/6387.html

注意:  

  转型构造函数可以将其它类型的参数转换为类类型,如果我们要进行相反的转换过程,将类类型转换为其它数据类型,则需重载转型操作符。转型操作符重载函数的声明语法如下:
      operator 类型名 ();
  转型操作符重载函数有几点需要注意的:

    • 函数没有返回类型;
    • 虽然没有返回类型但是函数体中必须有return语句,其返回类型是由类型名来指定的;
    • 转型操作符重载函数只能以类的成员函数的形式进行重载,而不能以友元函数或顶层函数的形式进行重载。

  转型操作符重载可以给程序带来一定的方便,但是建议还是谨慎使用。因为系统通常在需要的时候就会调用转型操作符重载函数,该函数的调用时隐式的,有时候会给程序带来一些意想不到的问题。

--------------------------------------------------

在前面我们已经介绍过转型构造函数,转型构造函数可以将其它类型的参数转换为类类型,如果我们要进行相反的转换过程,将类类型转换为其它数据类型,则需重载转型操作符。转型操作符重载函数的声明语法如下:
    operator 类型名 ();
转型操作符重载函数有几点需要注意的:

  • 函数没有返回类型;
  • 虽然没有返回类型但是函数体中必须有return语句,其返回类型是由类型名来指定的;
  • 转型操作符重载函数只能以类的成员函数的形式进行重载,而不能以友元函数或顶层函数的形式进行重载。

例1:

#include <iostream>
using namespace std; class clock
{
public:
clock(){hour = min = ap = ;}
clock(int h, int m, int ap);
operator int();
private:
int hour;
int min;
int ap; // 0表示am, 1表示pm
}; clock::clock(int h, int m, int ap)
{
hour = h;
min = m;
this->ap = ap;
} //转型操作符重载函数
clock::operator int()
{
int time = hour;
if(time == )
time = ;
if(ap == )
time += ;
time *= ;
time += min;
return time;
} int main()
{
clock c(,,);
int time = c;
cout<<time<<endl;
return ;
}

在本例中我们重载了一个时钟类clock,该类中我们声明了一个转型操作符重载函数,该函数可以将类类型的时间转换为一个整形,转换后的整数是军事时间。在主函数中我们定义了一个clock类的对象c,之后将其赋给一个整形变量time,因为我们定义了转型操作符重载函数,因此这一句话并没有出现语法错误。

转型操作符重载可以给程序带来一定的方便,但是建议还是谨慎使用。因为系统通常在需要的时候就会调用转型操作符重载函数,该函数的调用时隐式的,有时候会给程序带来一些意想不到的问题。

5.9 C++重载转型操作符的更多相关文章

  1. C++ 之 重载赋值操作符

    Widget 类中,定义了一个 Bitmap 类型的私有数据成员 -- pb 指针 class Bitmap { ... }; class Widget { private: Bitmap *pb; ...

  2. C++中复制构造函数与重载赋值操作符总结

    前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...

  3. 【M2】最好使用C++转型操作符

    1.C语言中的转型操作符有两个问题: a.是个通用的转换操作符,也就是说,可以从一个类型转换到其他类型.通用必定是低效率和冗余的,因为要考虑很多情况. b.在代码中,难以辨认出哪些是类型转换. 2.C ...

  4. C++中复制构造函数与重载赋值操作符

    我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成这样的四个函数.例如以下类:   class CTe ...

  5. C++中的四种转型操作符

    在具体介绍C++中的四种转型操作符之前,我们先来说说旧式转型的缺点: ①它差点儿同意将不论什么类型转换为不论什么其它类型,这是十分拙劣的.假设每次转型都可以更精确地指明意图,则更好. ②旧式转型难以辨 ...

  6. 5.6 C++重载下标操作符

    参考:http://www.weixueyuan.net/view/6384.html 总结: 下标操作符是必须要以类的成员函数的形式进行重载的.其在类中的声明格式如下:    返回类型 & ...

  7. 5.5 C++重载赋值操作符

    参考:http://www.weixueyuan.net/view/6383.html 总结: 重载赋值操作符同重载类的是拷贝构造函数的原因是一样,将一个对象拷贝给另一个对象,同时当类中存在指针类型的 ...

  8. C++转型操作符

    转:http://www.cnblogs.com/hazir/archive/2012/04/14/2447251.html 旧式的C转型方式,几乎允许你将任何类型转换为任何其它类型,有其自身的缺陷, ...

  9. 【c++】c++中重载输出操作符,为什么要返回引用

    针对:ostream & operator <<(ostream & os, const ClassType &object) 说明几点: 1.第一个形参为对ost ...

随机推荐

  1. phalcon的save方法保存失败?

    phalcon的save方法保存失败? 因为表中设置了一个字段:disabled, 默认值是1, 在创建数据的时候,disabled没有传值过去,导致save方法一直是false, 当返回false时 ...

  2. centos7: nginx安装配置

    centos平台编译环境使用如下指令 安装make: yum -y install gcc automake autoconf libtool make 安装g++: yum install gcc ...

  3. 新C# 操作Excel属性

    C# 操作Excel属性 数字(Range.NumberFormatlocal 属性) 常规:Range.NumberFormatlocal = "G/通用格式" 数值:Range ...

  4. 微信小程序获取腾讯经纬度,得到具体地址

    getCityNameOFLocation: function() { var that = this; wx.getLocation({ type: 'wgs84', // 默认为 wgs84 返回 ...

  5. 『TensorFlow』分布式训练_其三_多机分布式

    本节中的代码大量使用『TensorFlow』分布式训练_其一_逻辑梳理中介绍的概念,是成熟的多机分布式训练样例 一.基本概念 Cluster.Job.task概念:三者可以简单的看成是层次关系,tas ...

  6. E. Intersection of Permutations

    题意:给两个排列,2种操作1,查询两个区间a和b一样的值个数,2,交换b的两个值 题解:树套树,先把a变成1到n的排列,对b做相同的变换,然后问题就变成了查询区间lb,rb中la到ra的个数,带修改可 ...

  7. 【转】预装Win8/8.1 中文版系统升级为专业版或专业版含媒体中心版的简单方法

    [转]预装Win8/8.1 中文版系统升级为专业版或专业版含媒体中心版的简单方法 原文地址:http://www.iruanmi.com/upgrade-win8-china-to-a-higher- ...

  8. rsync+inotify

    一.rsync 1.1rsync是啥 相当于cp.scp.rm等工具,但优于这些工具,主要用在数据备份 1.2.rsync安装 yum -y install rsync --update 客户端删除文 ...

  9. vs 2017 Integrated Security 为sspi 含义

    关于sql连接语句中的Integrated Security=SSPI解决方法:即:Security Support Provider Interface设置Integrated Security为 ...

  10. Oracle date timestamp 毫秒 - 时间函数总结(转)

    原文地址:Oracle date timestamp 毫秒 - 时间函数总结 yyyy-mm-dd hh24:mi:ss.ff  年-月-日 时:分:秒.毫秒 --上一月,上一年select add_ ...