您的位置:首页 > 其它

隐式类类型转换以及explicit

2012-09-03 09:08 274 查看
先有如下构造函数版本:

class Sales_item{

public:

Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}

Sales_item(std::istream &is);

}

原本的成员函数same_isbn()接收一个Sales_item对象作为实参,判断两个对象是否对应的是同一本书。

但是 String null_book="9-99-9999"

item.same_isbn(null_book);也是成立的,因为进行了隐式的类类型转换,使用string类型的null_book(通过默认构造函数)创建了一个临时的对象,然后用该临时对象作为参数传递给same_isbn()函数。

以上这种就成为类类型的隐式转换。可以通过explicit标识来防止进行隐式类类型转换。

class Sales_item{

public:

explicit Sales_item(const std::string &book): isbn(book),units_sold(0),revenue(0.0){}

explicit Sales_item(std::istream &is);//注意explicit只能出现在类型的申明中,在之后类外进行定义时,
explicit关键字不能够再出现。

}

如此一来,item.same_isbn(null_book)将是错误的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: