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:
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:
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 8O