下面的构造函数用于将double类型的值转换为Stonewt类型:
Stonewt(double lbs);
也就是说,可以这样写代码:
Stonewt myCat;
myCat = 19.6;
程序使用构造函数Stonewt(double)来创建一个临时对象,并将19.6作为初始化值。随后,采用逐成员赋值方式将该临时对象的内容复制到myCat中。这一过程称为隐式转换,因为它是自动进行的,而不需要显式强制类型转换。
只有接受一个参数的构造函数才能作为转换函数。下面的函数有两个参数,因此不能用来转换类型:
Stonewt(int stn, double lbs);
然而,如果给第二个参数提供默认值,它便可用于转换int:
Stonewt(int stn, double lbs = 0);
由于这种自动特性并非总是合乎需要的,C++新增了关键字explicit,用于关闭这种自动特性。例如可以声明如下构造函数:
explicit Stonewt(double lbs);
这将关闭隐式转换,但任然允许显式转换,即显式强制类型转换:
Stonewt myCat;
myCat = 19.6; //not valid
mycat = Stone(19.6); //OK, an explicit conversion
注意:只接受一个参数的构造函数定义了从参数类型到类类型的转换。如果使用了关键字explicit限定了这种构造函数,则它只能用于显示转换,否则也可以用于隐式转换。
原文地址:https://www.cnblogs.com/ticonci/p/12455661.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。