C++ 2过载操作员>&燃气轮机;方法被调用
我有一个复杂的类,有两个重载的C++ 2过载操作员>&燃气轮机;方法被调用,c++,C++,我有一个复杂的类,有两个重载的操作符>方法,一个用于控制台中的std::istream,第二个用于std::ifstream std::istream& operator>>(std::istream& is, Complex& c) { int re, im; std::cout << "input the real-part of the complex" << std::endl;
操作符>
方法,一个用于控制台中的std::istream
,第二个用于std::ifstream
std::istream& operator>>(std::istream& is, Complex& c)
{
int re, im;
std::cout << "input the real-part of the complex" << std::endl;
while ( ! (is >> re))
{
std::cout << "Please give me a double! Try again: \n";
is.clear();
is.ignore(1000, '\n');
}
std::cout << "input the imaginary-part of the complex" << std::endl;
while ( ! (is >> im))
{
std::cout << "Please give me a double! Try again: \n";
is.clear();
is.ignore(1000, '\n');
}
c = Complex(re, im);
return is;
}
std::ifstream& operator>>(std::ifstream& ifs, Complex& c)
{
int re, im;
ifs >> re; ifs>> im;
c = Complex(re,im);
return ifs;
}
这两个操作符>>方法都被调用,因此控制台包含额外的输出,但是数据是从文件中正确加载的。结果显示在图像中很容易注意到,程序要求给定的值,就像控制台缓冲区要求从文件缓冲区加载数据一样
有没有其他方法来处理它,除了CRATE单独的方法<代码>插入式Ray2 < /C> > <代码> STD::IfStase而不是<代码> STD::ISTRAMA
< P>可以考虑模板<代码>插件> <代码>:template<class T>
void insertArray(T& is, Complex* arr, int size)
模板
无效插入阵列(T&is,复杂*arr,整数大小)
<代码> > p>可以考虑模板<代码>插件> <代码>:
template<class T>
void insertArray(T& is, Complex* arr, int size)
模板
无效插入阵列(T&is,复杂*arr,整数大小)
如果我正确理解你的问题,你可以写:
if ( &is == &std::cin )
std::cout << "Please give me a double! Try again: \n";
if(&is==&std::cin)
如果我正确理解你的问题,你可以写:
if ( &is == &std::cin )
std::cout << "Please give me a double! Try again: \n";
if(&is==&std::cin)
std::难道没有什么特别的原因让你一开始就有两个重载吗?看起来并不是两个重载都被调用,只有一个重载用于std::istream
,这是有意义的,因为在insertArray
中,is
isstd::istream&
。我不建议实现这个操作符两次。如果我使用您的类并希望从控制台读取它,但提供自己的消息,该怎么办?我不能,它总是用你的。老实说:不。。。这个复杂的课程是由主管提供的,我应该在做作业时使用它。可能他想在控制台输入时提供“用户友好”的数据请求,这在使用std::ifstream
时是不必要的,为什么忽略1000个字符而不是所有字符?有一个特殊的常数,你可以用它,我记不清了。有什么特别的原因你一开始就有两个重载吗?看起来并不是两个重载都被调用,只有一个用于std::istream
,这很有意义,因为在insertArray
中,is
isstd::istream&
。我不建议两次实现这个操作符。如果我使用您的类并希望从控制台读取它,但提供自己的消息,该怎么办?我不能,它总是用你的。老实说:不。。。这个复杂的课程是由主管提供的,我应该在做作业时使用它。可能他想在控制台输入时提供“用户友好”的数据请求,这在使用std::ifstream
时是不必要的,为什么忽略1000个字符而不是所有字符?有一个特殊的常数,你可以用它,我记不得了。