gpt4 book ai didi

c++ - 用户定义类的输入流

转载 作者:行者123 更新时间:2023-11-30 02:48:50 24 4
gpt4 key购买 nike

对于用户定义的类,我重载了 << cout 的运算符如下

ostream& operator<<(ostream& os, const myObject& obj_)
{
if (obj_.somefloat != 0)
os << "(" << obj_.somefloat << ")";
else if ( obj_.oneint != 0 && obj_.twoint != 0)
os << "(" << obj_.oneint << "#" << obj_.twoint << ")";
else
os << "Empty Object";
return os;
}

如何重载>>相当于 cin 的运算符

最佳答案

这应该有效:

std::istream& operator>>( std::istream& in, myObject& obj_ )
{
char c;
if( in >> c )
{
if( c == '(' )
{
float f;
if( in >> f >> c ) // f reads also an int
{
if( c == ')' ) // single float format
{
if( f != 0.0 )
obj_.somefloat = f;
else
in.setstate( std::ios_base::failbit );
}
else if( c == '#' ) // two int format
{
if( float(int(f)) != f )
in.setstate( std::ios_base::failbit );
else
{
obj_.somefloat = 0;
obj_.oneint = int(f);
if( in >> obj_.twoint >> c && (c != ')' || (obj_.oneint == 0 && obj_.twoint == 0) ) )
in.setstate( std::ios_base::failbit );
}
}
else
in.setstate( std::ios_base::failbit );
}
}
else if( c == 'E' ) // "Empty Object"
{
const char* txt="Empty Object";
++txt; // 'E' is already read
for( ; *txt != 0 && in.get() == *txt && in; ++txt )
;
if( *txt == char(0) )
{
obj_.somefloat = 0;
obj_.oneint = 0;
obj_.twoint = 0;
}
else
in.setstate( std::ios_base::failbit );
}
else
in.setstate( std::ios_base::failbit );
}
return in;
}

关于c++ - 用户定义类的输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21773291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com