c++プログラミング練習030:どうしてwhile(cin>>n)が成立したのか本当に分かりますか?


北京大学プログラム設計とアルゴリズム(三)試験問題まとめ(2020春)
説明
2つの整数を読み込み、-1にぶつかるまで2つの整数を出力します.
#include 
using namespace std;
class MyCin
{
//          
};
int main()
{
    MyCin m;
    int n1,n2;
    while( m >> n1 >> n2) 
        cout  << n1 << " " << n2 << endl;
    return 0;
}

複数のグループのデータを入力します.グループごとに1行、2つの整数です.
出力は各グループのデータに対して、そのまま出力入力中に-1が現れた場合、プログラム終了入力中に-1が保証される
サンプル入力12 44 344 555-12 3
サンプル出力12 44 344 555
ソースGuo Wei
ぶんせきwhile(cin >> n)が成立する理由は、入力が完了したときにboolタイプのfalseを返し、ループを停止することができるからです.では、()演算子をリロードしてタイプ変換を行う必要があります.その後、-1で終了し、左がオブジェクトで、右が数値の>>演算子をリロードする必要があります.
class MyCin
{
private:
    bool status;
public:
    MyCin():status(true){}
    MyCin & operator >> (int & n) {
        if (!status) return *this;
        cin >> n;
        if (n == -1) status = false;
        return *this;
    }
    operator bool()  { return status; }//      
};

複数回入力するには参照を返す必要があるため、ここではMyCin & operator >> (int & n)....です.