重载类型转化例如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);
}

全部评论

相关推荐

04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务