C++语言程序设计(郑莉) 10用构造函数定义类型转换

  • c++ 中可以通过构造函数,来自定义类型之间的转换。一个构造函数,只要可以用一个参数调用,那么它就设定了一种从参数类型到这个类类型的类型转换。

这里的类型转换操作符可以省去,因为默认情况下,类的构造函数所规定的类型转换,允许通过隐含类型转换进行

cout<<Line(Point(1), Point (4)) .getLen () <<end1;
cout<<Line((Point)l, (Point)4) .getLen()<<end1;
cout<< Line (static cast< point> (1) ), static cast< point> (4) ) . getLen ()<< end1;
//省略类型转换操作符
cout<<Line (1 , 4) .getLen() <<end1;
  • 只允许显式执行的类型转换
    c++ 允许避免这种隐含转换的发生。只要在构造函数前加上 explicit 关键字,以这个构造函数定义的类型转换,只能通过显式转换的方式完成。
    如果函数的实现与函数在类定义中的声明是分离的,那么 explicit 关键字应当写在类定义中的函数原型声明处,而不能写在类定义外的函数实现处,因为 explicit是用来约束这个构造函数被调用的方式的,属于一个类的对外接口的一部分,而是否加explicit 关键字,与函数实现代码的生成无关。                                                                                                                                                                     如果一个构造函数可以只用一个参数调用,并且由此定义的类型转换没有明确的意义,那么应当对这个构造函数使用 explicit 关键字,避免类型转换被误用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值