类型转换中存在的问题

一、C++对于系统数据类型可进行隐式转换和显式转换,但是对于用户自定义的数据类型无法自动进行类型转换操作,可通过两种转换函数的方式进行类型转换:构造函数充当转换函数和自定义类型转换函数。
二、使用构造函数进行类型转换时,类内至少需要定义一个只带一个参数的构造函数;当需要进行类型转换时,自动调用此构造函数;
三、转换函数一般形式:operator type(){… return目的类型数据}
使用时需要注意:
1、转换函数只能定义为类的成员函数,且必须为非静态的;
2、转换函数不能定义为类的友元函数;
3、转换函数没有参数,也不显式的给出返回类型;
4、转换函数必须含有“return目的类型的数据类型”的语句;
5、一个类可以定义多个转换函数。
四、C++定义的强制转换运算符:
1、常量强制转换:const_cast(object) 将地址object转换成类型type,其中type和object必须是指针、引用、算术类型或者枚举类型;
2、动态强制转换:dynamic_cast(object)将object值转换为类型为类型为type对象的指针,若类型不符返回空,运行时需要额外的运行时间;
3、重释强制转换:reinterpret_cast(object) 将任何指针转换成其他类型的指针,其中type必须是指针、引用算术类型或者指向函数和类成员的指针;
4、静态强制转换:static_cast(object) 静态转换只能用于类型兼容的转换(有宽到窄),但是使用时并不能保证转型的有效性,其仅仅执行需要的指针运算,为了确保其安全性,使用时必须每次要执行的转型都要进行测试。
五、静态类型检查和动态类型检查
1、静态类型检查是在编译时由编译器检查类型操作的正确性。
2、动态类型检查是运行时校验类型的正确性,动态类型检查经常随着向下的类型转换,而且会增加不必要的软件成本。
六、使用动态类型检查时经常出现的问题:
1、面向对象的变成具有封装性,动态类型检查有时会破坏封装;
2、动态类型检查还要安全测试以确保该对象支持所有要求的成员对象;
3、运行时捕获的错误花费成本远高于编译时发现该错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值