输入运算符与函数重载

问题描述 投票:0回答:1

我对C++有点陌生,我必须解决以下问题。

我必须创建一个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;
}

所以我创建了一个类,里面放了一个空的向量。目前,我的问题是如何重载输入操作符,使输入可以直接进入对象的向量中。

这是我到现在为止所尝试的(我没有尝试限制部分,我现在只是想把输入添加到一个向量中),但似乎输入>>c.newnumber(input)有问题。

如果你能抽出时间来帮助我,非常感谢。

代码。

#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;
}
c++ operator-overloading
1个回答
2
投票

让我们来看看我们要解决的问题......。

你有一个 newnumber() 函数,将采取一个 int 并将其添加到您的 Sum 对象。

在你的插入操作符重载中,你被赋予了一个 Sum 对象和 istream 对象。我们知道我们有 newnumber() 在...上 Sum 对象,但我们只有在有一个 int! 那么,我们如何才能得到一个 int 来自 istream 然后传给你的 Sum?

我会这样做。

std::istream & operator>>(std::istream &input, Sum & c){
    int val;
    input >> val;
    // Maybe do some validation checking here?
    c.newnumber(val);
    return input;
}
© www.soinside.com 2019 - 2024. All rights reserved.