C++ Prime 之类类型转换(2)

 在上一篇的类类型转换中,我们只是学习了将实参的对象类型转换为类类型。这篇我们将学习将一个类类型的值转换为其他类型。我们要首先了解什么是"类类型转换运算符"?书上的定义说:是类的一种特殊的成员函数,形如:`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.14cout<<"类型转换符将3.14转换为:"<<s1.show()<<endl;        //val的值,此时为类型转换符转换之后的int类型
//s1+3.14;          //内置类型将int类型转化为double
cout<<"内置类型将s1+3.14转换为:"<<s1+3.14<<endl;

运行结果为:
运行结果

猜你喜欢

转载自blog.csdn.net/u013635579/article/details/72775305