您的位置:首页 > 编程语言 > C语言/C++

C++中的隐式类型转换

2015-05-23 11:41 190 查看

C++ 编程调试秘笈读书笔记

如果有两个类Apple和Orange, 可通过两种方式将Apple 类对象隐式的转化为Orange 类对象来使用。

1、Orange 具有一个可只接受Apple 类型的参数的构造函数(可带单参的构造函数)。

Orange(const Apple & apple , Arg arg = 0);

2、Apple 具有一个类型转换函数(operator type() ):

operator Orange() ;

禁止这两种隐式转换:把1中的构造函数设为 explicit ;不去定义2中的类型转换函数,而是给Apple类另外定义一个见文知意的函数来实现相同功能 Orange AsOrange() const .

C++编程惯用法

由于存在隐式类型转化,所有对Orange对象可执行的操作都可以对Apple对象执行,实际的过程都是Apple对象转换成一个临时的Orange对象,不过Orange的方法,Apple没有定义,则不能使用。

b可隐式转换为A类型的对象;如果可以f(a), 那么一定可以f(b) ; 不过对于成员函数 , 则只能b.menf() ,

于是,建议一元操作符,以成员函数的形式重载;两个操作数对等的运算符,以非成员函数的形式重载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: