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