标签:
class SmallInt { public: SmallInt(int i=0):val(i) { if(i<0 || i>255) throw std::out_of_range("越界!!!
越界进球无效!
"); } explicit operator int() const {return val;} //转换操作符。不能有參数,是成员函数,没有返回类型 private: size_t val; };
void fun1() { SmallInt si; si=4; //吧4隐式转换成SmallInt类型 // si+3; //隐式转换si为int类型,因为explicit这里会出错,加了explicit之后仅仅能显式转换 }
void fun2() { int i=42; // cin<<i; this code would be legal if the conversion to bool were not explicit! }
/** * 功能:重载。转换,运算符 * 时间:2014年7月19日15:05:21 * 作者:cutter_point */ #include<iostream> #include <stdexcept> using namespace std; /************************************** Conversion Operators 转换操作符 **************************************/ /* operator type() const Conversions to an array or a function type are not permitted. 转换函数必须是成员函数。不能指定返回 类型,必须有一个空的參数列表。 函数通常应 const。 */ /** Defining a Class with a Conversion Operator */ //定义一个类。表示一个在0到255范围类的一个整数 class SmallInt { public: SmallInt(int i=0):val(i) { if(i<0 || i>255) throw std::out_of_range("越界!!!越界进球无效!"); } explicit operator int() const {return val;} //转换操作符。不能有參数。是成员函数。没有返回类型 private: size_t val; }; void fun1() { SmallInt si; si=4; //吧4隐式转换成SmallInt类型 // si+3; //隐式转换si为int类型,因为explicit这里会出错。加了explicit之后仅仅能显式转换 } /** Conversion Operators Can Yield Suprising Results 重载操作符能产生惊人的结果 */ void fun2() { int i=42; // cin<<i; this code would be legal if the conversion to bool were not explicit! } /** explicit Conversion Operators 明白转换操作 */ //说白了就是叫我们使用explicit来使用! int main() { return 0; }
版权声明:本文博主原创文章,博客,未经同意不得转载。
标签:
原文地址:http://www.cnblogs.com/gcczhongduan/p/4916584.html