使用函数重载输入运算符

Input operator overloading with a function

我对 C++ 有点陌生,我必须解决以下练习:

我必须创建一个 class Sum(limit) 的对象,用户可以在其中输入数字,直到所有输入的总和达到限制。

主要功能必须如下所示且无法更改:

int main (){
    Sum sum(100);
    std::cout << "Enter numbers\n";
    do{
        std::cin >> sum;
    } while (!sum.exceededlimit());
    std::cout << "The sum of all the components is : " << sum() << "\n";
    return 0;
}

所以我创建了 class 并在其中放置了一个空向量。现在,我遇到的问题是如何重载输入运算符,以便输入可以直接进入对象的向量。

这是我到目前为止尝试过的方法(我没有尝试限制部分,我现在只是尝试将输入添加到向量中)但是它似乎有输入问题>>c.newnumber(输入);

非常感谢你抽出时间来帮助我。

代码:

#include <iostream>
#include <vector>

class Sum {
    private:
        int limit;
    public:
        std::vector<int> vect;
        int newnumber(int x){
        vect.push_back(x);}
        Sum(int x);
};

std::istream & operator>>(std::istream &input, Sum & c){
    input>>c.newnumber(input);
    return input;
}


Sum::Sum(int x) {
    limit=x;
}

int main () {
    Sum sum(100);
    std::cin >> sum;
    std::cin >> sum;
    std::cin >> sum;
    std::cin >> sum;
    std::cin >> sum;
    return 0;
}

让我们看看我们必须在这里使用什么...

您有一个 newnumber() 函数,它将接受一个 int 并将其添加到您的 Sum 对象。

在您的插入运算符重载中,您得到了一个 Sum 对象和一个 istream 对象。我们知道我们在 Sum 对象上有 newnumber(),但只有当我们有 int 时才能使用它!那么我们怎样才能从 istream 得到一个 int 然后传递给你的 Sum

我会这样做:

std::istream & operator>>(std::istream &input, Sum & c){
    int val;
    input >> val;
    // Maybe do some validation checking here?
    c.newnumber(val);
    return input;
}