Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载提取运算符_C++_File_Operator Overloading - Fatal编程技术网

C++ 重载提取运算符

C++ 重载提取运算符,c++,file,operator-overloading,C++,File,Operator Overloading,我正在重载extraction操作符以读取包含一对数字的节点 正如你所看到的,我正在打印一条消息,让用户知道他们在写哪个号码。但是,当我从文件中读取时,消息仍会打印出来。因此,我想知道是否有一种方法可以检查我是从文件还是从键盘读取,或者是否有另一种方法可以避免在读取文件时打印消息 代码: istream&operator>>(istream&input、Node&X) { coutX.info1; coutX.info2; X.next=NULL; 返回输入; } 在流媒体运营商中,您根本不应该

我正在重载extraction操作符以读取包含一对数字的节点

正如你所看到的,我正在打印一条消息,让用户知道他们在写哪个号码。但是,当我从文件中读取时,消息仍会打印出来。因此,我想知道是否有一种方法可以检查我是从文件还是从键盘读取,或者是否有另一种方法可以避免在读取文件时打印消息

代码:

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;
}