类类型转换(转换构造函数 & 类型转换运算符)

 

 

 

 

 

 

 

 

 

 

 

 

 

只有一个参数的构造函数可以作为转换构造函数,默认情况下会发生隐式转换,但是如果你对转换构造函数加上了关键字explicit,它就不允许隐式转换,但是你可以通过static_cast等进行强制转换。

而且只允许一步类类型转换,什么意思呢?

比如一个类Str,它有一个构造函数,这个构造函数只需要一个参数,且这个参数类型为string,那么你不可以通过Str s = “qwe”来利用一个临时Str对象初始化s,因为这个临时对象需要两步转换才可以成为Str

第一步:把“qwe”变成string类型

第二步:把string类型通过转换构造函数变成Str类型

Str s = string(“qwe”)——这个就可以

 

这个说明白了,我们再说一下类型转换运算符

比如说你在类Str中定义了一个这个类型转换成int类型的类型转换函数,然后默认下如果在下面这种情况下:

Str s;

int b;

int a = s+b;

s就会隐式转换成int类型进行运算(也可以对它使用explicit来禁止其隐式转换)

类型转换运算符形式:

operator type() const; //type可以是int、double、bool这些类型。不允许有形参,返回值类型为type

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-08-06 14:49  kongbursi  阅读(457)  评论(0编辑  收藏  举报