Bonjours, j'ai un problème leur d'un retour de valeur quand je surcharge l'opérateur+.
Voilà mes fichier
Entier.h
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 #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
si je fait , a+= b, j'obtient le bon résultat, pareil si je fait a++ ou ++a.
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; }
Mais si je fait par exemple :
c = a + b avec a=200 et b = 5 c = 400719605![]()
Partager