[class] Surcharge d'opérateur +

Surcharge d'opérateur + [class] - C++ - Programmation

Marsh Posté le 27-11-2004 à 11:54:08    

Bonjour,
 
Dans la fonction "main" de mon programme j'ai ceci:

Code :
  1. surcharge_plus exemple('a');
  2. exemple = exemple + 'b';
  3. exemple.affi();


 
Et j'aimerais bien qu'il me retourne ce résultat: "ab", mais j'y arrive pas :(
 
Voici ma classe:

Code :
  1. class surcharge_plus{
  2.   public:
  3.    surcharge_plus(char); //Constructeur
  4.    surcharge_plus operator+(char);
  5.    void affi(){cout<<deux_lettres;}
  6.   private:
  7.    char deux_lettres[2];
  8. };
  9. surcharge_plus::surcharge_plus(char lettre){
  10.   deux_lettres[0] = lettre;
  11. }
  12. surcharge_plus surcharge_plus::operator+(char lettre_add){
  13.   deux_lettres[1] = lettre_add;
  14.   return deux_lettres;
  15. }


 
Merci d'avance...

Reply

Marsh Posté le 27-11-2004 à 11:54:08   

Reply

Marsh Posté le 27-11-2004 à 12:40:03    

ton opérateur + retourne un char[] et non un surcharge_plus.
Tu devrais plutôt avoir ceci donc :

Code :
  1. surcharge_plus surcharge_plus::operator+(char lettre_add)
  2. {
  3.     deux_lettres[1] = lettre_add;
  4.     return *this
  5. }


 
mais ça reste mal. En effet cet operateur modifie this, c'est pas très courant pour un opérateur +. Qui plus est ta chaîne est non terminée par un '\0'. Il faudrait donc mieux que tu gère un tableau de char redimensionnable quand tu ajoutes des caractères et que tu t'assures de toujours terminer la chaîne.

Reply

Marsh Posté le 27-11-2004 à 12:42:47    

si vous persistez dans la fonctiopn membre, de grâce, marquez la conste ....

Reply

Marsh Posté le 28-11-2004 à 18:47:09    

Merci...mais:
 
-Que signifie exactement "return *this" ?
 
-Je vient de tester une autre façon de faire ma surcharge mais dès que je fait: " exemple = exemple + 'b';", la lettre "a" diparait, pourquoi ?
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class surcharge_plus{
  4.   public:
  5.    surcharge_plus(char); //Constructeur
  6.    surcharge_plus(){} //Surcharge constructeur
  7.    surcharge_plus operator+(char);
  8.    void affi(){cout<<deux_lettres<<endl;}
  9.   private:
  10.    char deux_lettres[3];
  11. };
  12. surcharge_plus::surcharge_plus(char lettre){
  13.   deux_lettres[0] = lettre;
  14. }
  15. surcharge_plus surcharge_plus::operator+(char lettre_add){
  16.   surcharge_plus tmp;
  17.   tmp.deux_lettres[1]=lettre_add;
  18.   tmp.deux_lettres[2]='\0';
  19.   return tmp;
  20. }
  21. int main(){
  22.   surcharge_plus exemple('a');
  23.   exemple = exemple + 'b';
  24.   exemple.affi();
  25.   return 0;
  26. }

Reply

Marsh Posté le 28-11-2004 à 21:12:31    

surcharge_plus operator+(char);
 
tout ce qu'il faut pas faire ...

Reply

Marsh Posté le 28-11-2004 à 21:37:28    

Merci du conseil Taz mais qu'est ce qu'il faut faire alors ;) ?

Reply

Marsh Posté le 28-11-2004 à 21:41:05    

tu fais  
 
 
TaClasse operator+(const TaClasse &autre) const
 
 
et x + 'a' sera évalué comme  x.operator+( TaClasse('a') )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed