• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > c++类的隐式转换与强制转换重载详解

c++类的隐式转换与强制转换重载详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++类,c++ string类,c++类的使用,c++类与对象,c++模板类等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在写这篇文章之前,让我们先回顾一下编译器通过匹配过程确定调用哪一个函数的匹配顺序:
(1)寻找和使用最符合函数名和参数类型(包括返回值)的函数,若找到则调用;

(2)否则,寻找一个函数模板,将其实例化产生一个匹配的重载函数,若找到则调用;

(3)否则,寻找可以通过类型转换进行参数匹配的重载函数,若找到则调用它。

如果以上步骤均未找到匹配函数,则这个调用是错误的;如果这个调用有多于一个的匹配选译,则调用匹配出现二义性,也是错误的。
 
类型转换是将一种类型的值映射为另一种类型的值。类型转换实际上包含有自动隐含和强制的两种。

C语言编译系统提供的内部数据类型的自动隐式转换规则如下:

1.程序在执行算术运算时,低类型可以转换为高类型。

2.在赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给它。

3.当在函数调用时,将实参值赋给形参,系统隐式地将实参转换为形参的类型后,赋给形参。

4.函数有返回值时,系统将自动地将返回表达式类型转换为函数类型后,赋值给调用函数。

在以上情况下,系统会进行隐式转换的。当在程序中发现两个数据类型不相容时,又不能自动完成隐式转换,则将出现编译错误。例如:
   int* p = 100;
在这种情况下,编译程序将报错,为了消除错误,可以进行如下所示的强制类型转换:
   int* p = (int *)100;
将整型数100显式地转换成指针类型。

构造函数具有类型转换功能

在实际应用中,当类定义中提供了单个参数的构造函数时,该类便提供了一种将其他数据类型的数值或变量转换为用户所定义数据类型的方法。因此,可以说单个参数的构造函数提供了数据转换的功能。下面通过一个例子进一步说明单参数构造函数的类型转换功能。

由程序可知,d是一个double型数值,r是Rational类的对象,这两个不同类型的数据进行加法之所以能够进行是得益于转换函数operatordouble()。为使上述加法能够进行,编译系统先检查类Rational的说明,看是否存在在下转换函数能够将Rational类型的操作数转换为double类型的操作数。由于Rational类中说明了转换函数operatordouble(),它可以在程序运行时进行上述类型转换,因此,该程序中实现了d=r;的操作。

定义转换函数时应注意如下几点:
(1)转换函数是用户定义的成员函数,但它要是非静态的。
(2)转换函数的不可以有返回值。(意思是声明中不可以有返回值)
(3)转换函数也不带任何参数。
(4)转换函数函数还不能定义为友元函数。

转换函数的名称是类型转换的目标类型,因此,不必再为它指定返回值类型;转换函数是被用于本类型的数值或变量转换为其他的类型,也不必带参数。

类中的构造函数完成其他类型到类类型的转换,而重载强制转换完成类类型到其他类型的转换。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 类访问控制的条件总结
  • C++派生访问说明符小记(推荐)
  • 探讨C++中不能声明为虚函数的有哪些函数
  • C++ 类中有虚函数(虚函数表)时 内存分布详解
  • C++对象内存分布详解(包括字节对齐和虚函数表)
  • 关于C++中构造函数初始化成员列表的总结
  • 浅谈C++中派生类对象的内存布局
  • 关于C++类的成员初始化列表的相关问题
  • 简单总结C++中的修饰符类型
  • 解析C++中的5个存储类的作用

相关文章

  • 2017-05-28解析C语言中结构体struct的对齐问题
  • 2017-05-28基于欧几里德算法的使用
  • 2017-05-28VS2010 boost标准库开发环境安装教程
  • 2017-05-28常用的C语言排序算法(两种)
  • 2017-05-28深入C++中struct与class的区别分析
  • 2017-05-28关于C语言中参数的传值问题
  • 2017-05-28c++中冒号(:)和双冒号(::)的使用说明
  • 2017-05-28tc编译的dos程序和vc编译的win32控制台程序的异同
  • 2017-05-28C语言单链表常见操作汇总
  • 2017-05-28VC++进度条process Bar的用法实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • static全局变量与普通的全局变量的区别详细解析
    • c语言定时器示例分享
    • 基于C语言fflush()函数的使用详解
    • C语言 数组指针详解及示例代码
    • 深入理解C/C++混合编程
    • 纯C语言:检索与周游广度深度遍历源码分享
    • c++ 探讨奶牛生子的问题
    • C++ 通过指针实现多态实例详解
    • C语言实现汉诺塔游戏
    • C++中delete和delete[]的区别详细介绍

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有