为什么cout在重载运算符<<的朋友函数中不起作用,这是istream运算符

时间:2019-02-14 07:24:24

标签: c++ operator-overloading cout istream

为什么cout在无法使C ++(>>)的istream运算符重载的函数中起作用?我应该怎么做才能使其正常工作?

在以下行中:cout >> "Enter x and y: "显示错误?

为什么?
我该如何解决?

这是overload >>operator <<的代码

#include<iostream>

using namespace std;

class myClass
{
    int x,y;
public:
    myClass(int a,int b)
    {
        x=a;y=b;
    }
    friend istream &operator>>(istream &in, myClass &ob);
    friend ostream &operator<<(ostream &out, myClass ob);
};
istream &operator>>(istream &in,myClass &ob)
{
    cout >> "Enter x and y: ";
    in >> ob.x;
    in >> ob.y;
    return in;
}
ostream &operator<<(ostream &out,myClass ob)
{
    out << ob.x << " " << ob.y << endl;
}
int main()
{
    myClass ob(10,20);
    cout << ob;
    cin >> ob;
    cout << ob;
}

1 个答案:

答案 0 :(得分:1)

您的错误是您混淆了<<>>cout>>"Enter x and y: ";应该是cout << "Enter x and y: ";

在重载的operator>>中提示用户也是不好的风格。如果您的>>被用来读取文件怎么办?您不希望随后提示用户。因此,将cout<<"Enter x and y: ";移到它所属的主函数中。

istream &operator>>(istream &in,myClass &ob)
{
    in>>ob.x;
    in>>ob.y;
    return in;
}

int main()
{
    myClass ob(10,20);
    cout<<ob;
    cout<<"Enter x and y: ";
    cin>>ob;
    cout<<ob;
    return 0;
}