C++ 重载提取运算符
我正在重载extraction操作符以读取包含一对数字的节点 正如你所看到的,我正在打印一条消息,让用户知道他们在写哪个号码。但是,当我从文件中读取时,消息仍会打印出来。因此,我想知道是否有一种方法可以检查我是从文件还是从键盘读取,或者是否有另一种方法可以避免在读取文件时打印消息 代码:C++ 重载提取运算符,c++,file,operator-overloading,C++,File,Operator Overloading,我正在重载extraction操作符以读取包含一对数字的节点 正如你所看到的,我正在打印一条消息,让用户知道他们在写哪个号码。但是,当我从文件中读取时,消息仍会打印出来。因此,我想知道是否有一种方法可以检查我是从文件还是从键盘读取,或者是否有另一种方法可以避免在读取文件时打印消息 代码: istream&operator>>(istream&input、Node&X) { coutX.info1; coutX.info2; X.next=NULL; 返回输入; } 在流媒体运营商中,您根本不应该
istream&operator>>(istream&input、Node&X)
{
coutX.info1;
coutX.info2;
X.next=NULL;
返回输入;
}
在流媒体运营商中,您根本不应该与用户交互。这不是他们的目的,而且
操作符>>
应该只读取流中的下一个对象
相反,先进行交互,然后构造对象:
nod read_nod()
{
int info1 = 0;
cout << "Number 1: ";
cin >> info1;
int info2 = 0;
cout << "Number 2: ";
cin >> info2;
return nod(info1, info2);
}
nod read\u nod()
{
int info1=0;
cout>info1;
int info2=0;
cout>info2;
返回nod(info1、info2);
}
或
istream&operator>>(istream&input、Node&X)
{
输入>>X.info1;
输入>>X.info2;
X.next=NULL;
返回输入;
}
nod read_nod()
{
cout>n;
返回n;
}
当您重载插入运算符时,它的行为应与内置类型相同。您不应该要求任何输入,而应该只是抓取它。您可以添加一个重载来接受fstream&
,或者您可以使用dynamic\u cast
来检查流的运行时类型。然而,这两个都不是C++中的流操作符的精神。您不应该使用流式处理操作符提示输入;而是先提示,然后流到对象中。如果要在值之间进行提示,最好的方法是先读入两个整数(或双精度整数,或其他任何整数),然后从中构造自定义类型的对象。然后,您可以在流操作之间而不是在流操作中提示输入。
nod read_nod()
{
int info1 = 0;
cout << "Number 1: ";
cin >> info1;
int info2 = 0;
cout << "Number 2: ";
cin >> info2;
return nod(info1, info2);
}
istream & operator>> (istream &input, nod &X)
{
input >> X.info1;
input >> X.info2;
X.next = NULL;
return input;
}
nod read_nod()
{
cout << "Enter two numbers for the nod: ";
nod n;
cin >> n;
return n;
}