C++ 重载类型转换运算符

在读《Accelerated c++》时,对" while(cin>>x) " 感到疑惑。 难道 cin 会变为NULL么?不然要死循环了。猜测 io 应该重载了 bool 函数。 特转载这篇博文。

C++的运算符重载功能真的很强大,除了可以重载常规运算符(比如,+ - * / > < = etc. )也可以重载类型转换运算符(比如, (int)     (bool)    (char *) etc. ),请看下面的例子,类Student重载了运算符 (bool) .

 

#include <iostream>
using namespace std;

class Student
{
public:
Student(bool _isok = true) : isok(_isok){}

operator bool()
{
   return isok;
}

bool isok;

~Student(){}
};

int main(int argc, char *argv[])
{

Student a(true), b(false);

cout<<((bool)a)<<endl;
cout<<((bool)b)<<endl;

if( a )
   cout<<"a is ok"<<endl;
if( b )
   cout<<"b is ok"<<endl;

return 0;
}

运行结果:

1
0
a is ok

 

注意看那两个if语句, 结果中只出现“a is ok”,说明if语句条件表达式隐含地进行了类型转换(转换成bool型),这样,我们就能理解,为什么可以写这样的语句:

int n;

if ( cin>>n )

{

    ......

}

可以推断,io流类也重载了bool型转换运算符。

posted on 2011-10-12 17:54 zhengtao 阅读(712) 评论(0)  编辑 收藏 引用 所属分类: C++ 基础


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜