代码:
#include <iostream>
class Stone {
private:
static const int lbs = 14;
int stone;
double pds;
public:
Stone();
Stone(double lbs);
Stone(int stn, double lbs);
~Stone();
};
int main()
{
Stone bubbles;
Stone blossem(132.5);
Stone butterfly(10, 2);
Stone mycat;
mycat = 19.6;
//合法,事实上会进行隐式转换。先利用Stone(19.6)创建一个临时对象,然后逐成员赋值。
mycat = 19;
//合法。首先将int类型转换为double,然后调用Stone(double)构造函数。
}
分析:可以利用explicit关闭隐式自动转换,此时,只允许显示强制类型转换。
例:修改Stone(double)为:
explicit Stone(double lbs);
此时:
mycat = 19.6; //不合法。
mycat = Stone(19.6); //合法。
mycat = (Stone)19.6; //合法。