IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

surcharge+ et retour valeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 107
    Par défaut surcharge+ et retour valeur
    Bonjours, j'ai un problème leur d'un retour de valeur quand je surcharge l'opérateur+.

    Voilà mes fichier

    Entier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #ifndef _ENTIER_H
        #define _ENTIER_H
     
        class entier
        {
            public:
                /* Constructeur et Destructeur */
                entier();
                entier(unsigned int);
                ~entier();
     
                /* Operateurs + surchargés */
                entier& operator++(int);
                entier& operator++();
                entier& operator+=(const entier &);
                entier operator+(const entier &);
     
                /* Méthode générales d'accès */
     
                void afficher() const ;
                int eniemeValeur(int i) const ;
     
            private:
                int *pTabEntier;
                entier(int *);
                void miseEnForme();
        };
     
    #endif
    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    #include <iostream>
    #include "Entier.h"
     
     
    using namespace std;
     
    const short int TailleTableau = 3;
     
    entier::entier()
        :pTabEntier(new  int[TailleTableau]) {
            for(int i=0;i<TailleTableau;i++)
                pTabEntier[i] = 0;
    }
     
    entier::entier(unsigned int ValeurDepart)
        :pTabEntier(new int[TailleTableau]) {
            for(int i=0;i<TailleTableau;i++) {
                pTabEntier[i] = 0;
            }
            pTabEntier[TailleTableau-1] = ValeurDepart;
            miseEnForme();
    }
     
    entier::entier(int *ValeurDepart)
        :pTabEntier(new int[TailleTableau]) {
            for(int i=0;i<TailleTableau;i++) {
                    pTabEntier[i] = ValeurDepart[i];
            }
    }
     
    entier::~entier() {
            delete[] pTabEntier;
    }
     
    entier& entier::operator++(int) {
            pTabEntier[TailleTableau-1] +=1;
            miseEnForme();
            return *this;
    }
     
    entier& entier::operator++() {
            pTabEntier[TailleTableau-1] +=1;
            miseEnForme();
            return *this;
    }
     
    entier& entier::operator+=(const entier &rhs) {
        for(int i=0;i<TailleTableau;i++) {
            pTabEntier[i] += rhs.eniemeValeur(i);
        }
        miseEnForme();
        return *this;
    }
     
    entier entier::operator+(const entier &rhs) {
        entier Copy(pTabEntier);
        return entier( Copy += rhs );
    }
     
    int entier::eniemeValeur(int i) const {
        return pTabEntier[i];
    }
     
    void entier::afficher() const {
            for(int i = 0;i<TailleTableau;i++) {
                cout << pTabEntier[i] ;
                if( ((i+1)%6) == 0) {
                     cout << " " ;
                }
            }
    }
     
    void entier::miseEnForme() {
        for(int i=TailleTableau-1;i>=0;i--) {
            if(pTabEntier[i] >= 10 && i!=0 ) {
                pTabEntier[i-1] += pTabEntier[i] / 10 ;
                 pTabEntier[i] =  pTabEntier[i] % 10 ;
            }
            else if( i==0 &&  pTabEntier[i] >= 10 ) {
                pTabEntier[0]=0;
                for(int j=0;j<(TailleTableau-1) && pTabEntier[j]!=0;j++) {
                    pTabEntier[j]=0;
                }
                i=TailleTableau;
            }
        }
    }
     
    int main()
    {
        entier a(200),b(5),c(1);
        c = a + b;
        a.afficher() ;cout << endl << endl;
        b.afficher() ;cout << endl << endl;
        c.afficher() ;cout << endl << endl;
     
        return 0;
    }
    si je fait , a+= b, j'obtient le bon résultat, pareil si je fait a++ ou ++a.
    Mais si je fait par exemple :
    c = a + b avec a=200 et b = 5 c = 400719605

  2. #2
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Tu n'as pas surchargé l'opérateur '='.

  3. #3
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 237
    Par défaut
    J'ai survolé mais je n'ai pas vu d'opérateur d'affectation ?!!

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 107
    Par défaut
    comment ca ? je suis obligé de surcharger l'opérateur = aussi pour que le + fonctionne.

    De plus si je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (a+b).afficher() // me retourne 005

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Oui = est un opérateur comme les autres spécifique aux types de données qu'il traite.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 107
    Par défaut
    Vous pouvez me montré un exmple pour surcharger mon opérateur +, car la rien ne marche :s...

  7. #7
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 237
    Par défaut
    Ce n'est pas l'opérateur + qui ne vas pas. C'est l'opérateur =.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entier & operator = (const entier &) throw ();
    Attention, il renvoie une référence !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Retour valeur case à cocher depuis une base de données
    Par asvin dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/10/2008, 19h25
  2. retour valeur après évenement onChange
    Par dragonfly80 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/09/2008, 21h07
  3. Réponses: 3
    Dernier message: 12/05/2008, 09h10
  4. Probleme retour valeur recordset
    Par Access Newbie dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/07/2007, 11h37
  5. [PHP-JS] retour valeur javaScript dans php
    Par Tempotpo dans le forum Langage
    Réponses: 6
    Dernier message: 06/04/2006, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo