重载类型转化例如while(getline(cin))

今天在c++primerplus看到一个例子,我一直纠结while()里面怎么可以放类呢,明明应该是一个逻辑值才对,我查看了对应的源码,返回值确实也是类,后来老大给我发了一个链接才恍然大悟,内部用的是重载类型转化,ifstream成功的把类类型转化成了bool类型。
参考链接:http://blog.sina.com.cn/s/blog_ad0672d60101cd63.html
ifstream源代码如下:
 _CLR_OR_THIS_CALL _OPERATOR_BOOL() const
			{	// test if _Ipfx succeeded
			return (_Ok ? _CONVERTIBLE_TO_TRUE : 0);
			}
测试代码:
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
using namespace std;
int main()
{
	ifstream fin;
	fin.open( "log.txt" );
	if ( fin.is_open() == false )
	{
		cerr << "Cannot open the file\n";
		exit( EXIT_FAILURE );
	}
	string	item;
	string	s;
	int	count = 0;
	getline( fin, item );
	while ( fin )
	{
		++count;
		for ( int i = 0; i < item.size(); i++ )
		{
			if ( item[i] != ' ' )
				s += item[i];
		}
		cout << count << " : " << item << endl;
		getline( fin, item );
	}
	cout << "Done\n";
	cout << s << endl;
	fin.close();
	cin.get();
	return(0);
}

全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 19:05
面试官_我太想进步了:混学生会的,难怪简历这么水
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务