在上一篇的类类型转换中,我们只是学习了将实参的对象类型转换为类类型。这篇我们将学习将一个类类型的值转换为其他类型。我们要首先了解什么是"类类型转换运算符"?书上的定义说:是类的一种特殊的成员函数,形如:`operator *type*() const;`
其中type可以表示任何类型(void除外),只要该类型可以作为函数的返回类型。
注意:类型转换没有显式的返回类型,也没有形参,而且必须为类的成员函数,类型运算符一般不会改变转换对象的值,所以类型转换运算符被定义为const。
定义含有类型转换运算符的类:
class SimpleInt{
public:
SimpleInt(int i=0):val(i){} //将算术类型转换为SimpleInt类型
operator int() const {return val;} //将SimpleInt类型转换为int类型
private:
std::size_t val;
};
SimpleInt s;
s=4; //首先将4隐式的转换为SimpleInt,然后调用SimpleInt::operator=
s+3; //首先将s隐式的转换为int,然后执行整数的加法
我们可以将任何算术类型传递给SimpleInt的构造函数,也可以用类型转换运算符将SimpleInt转换为int,然后将int类型转换为其他类型。
//内置类型转换将double实参转换为int
SimpleInt s1=3.14; //调用SimpleInt(int)构造函数
//SimpleInt的类型转换运算符将s1转换为int
s1+3.14; //内置类型转换将所得int继续转化为double
我们不妨验证一下,在类中添加show方法:
public:
auto show(){ return val; }
s1=3.14;
cout<<"类型转换符将3.14转换为:"<<s1.show()<<endl; //val的值,此时为类型转换符转换之后的int类型
//s1+3.14; //内置类型将int类型转化为double
cout<<"内置类型将s1+3.14转换为:"<<s1+3.14<<endl;
运行结果为: