2 votes

Surcharge de l'opérateur d'entrée avec une fonction

Je suis un peu nouveau en C++ et je dois résoudre l'exercice suivant :

Je dois créer un objet de la classe Sum(limit) où l'utilisateur peut entrer des nombres jusqu'à ce que la somme de toutes les entrées atteigne la limite.

La fonction principale doit ressembler à ceci et ne peut pas être modifiée :

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

J'ai donc créé la classe dans laquelle j'ai mis un vecteur vide. Pour l'instant, le problème que j'ai est de savoir comment surcharger l'opérateur d'entrée pour que l'entrée puisse aller directement dans le vecteur de l'objet.

C'est ce que j'ai essayé jusqu'à présent (je n'ai pas essayé la partie limite, j'essaie juste d'ajouter une entrée à un vecteur pour l'instant) mais il semble y avoir un problème avec input>>c.newnumber(input) ;

Merci beaucoup si vous prenez le temps de m'aider.

Code :

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

2voto

Josh Points 2101

Regardons ce que nous avons pour travailler ici...

Vous avez un newnumber() qui prendra un int et l'ajouter à votre Sum objet.

Dans la surcharge de l'opérateur d'insertion, on vous donne un fichier Sum et un objet istream objet. Nous savons que nous avons newnumber() sur le Sum mais nous ne pouvons l'utiliser que si nous avons un objet int ! Alors comment obtenir un int de la istream à transmettre ensuite à votre Sum ?

Je le ferais comme :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X