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() ,
于是,建议一元操作符,以成员函数的形式重载;两个操作数对等的运算符,以非成员函数的形式重载。
相关文章推荐
- C/C++隐式类型转换导致的若干问题
- C++类型转换分为:隐式类型转换和显式类型转换
- c++基础--隐式类类型转换
- C++类型转换分为:隐式类型转换和显式类型转换
- C++隐式类类型转换
- 隐式类型转换与非成员函数(effective C++ 条款24&46)
- More Effective C++ 条款21 利用重载技术避免隐式类型转换
- C++ 中operator用法:隐式类型转换
- C++的隐式类型转换
- C/C++隐式类型转换导致的若干问题
- C++ 用operator实现隐式类型转换
- [C++再学习系列] 隐式类型转换与转换操作符operator T
- C++ 中operator用法:隐式类型转换
- More Effective C++ (条款21:利用重载技术避免隐式类型转换)
- C++隐式类类型转换
- C++隐式类型转换
- c++设计中可以利用重载避免隐式类型转换
- c++类型转换static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较,显示转换,隐式转换
- C++ 类型隐式转换学习
- c++隐式类型转换