begin process at 2012 02 10 13:18:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

[Débutant]Surcharge opérateur +


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[Débutant]Surcharge opérateur +

dimanche 4 décembre 2005 à 17:58:02 | [Débutant]Surcharge opérateur +

Geolem

Bonjour tout le monde !

Je n'arrive pas à surcharger mon opérateur +...
En faite, il faudrait que j'applique l'opérateur + à un objet de Message et à une chaine de caractère...

J'ai donc ma classe message :

class message{
   private:
      enum { n = 10 };
      static int cpt_id_message;
// compteur nombr id déjà utilisé
      
int num_id_message;
// num id du message
      
char *adresse_expediteur;
      char *adresse_destinataire;
      bool urgent;
      bool mess_lu;
      char *sujet;
      char *texte;

   public:
      message (void);
// constructeur par défaut
      message (const message & mess);
// constructeur de copie
      message (int num, char *ad_exp, char *ad_dest, bool urg, bool msg_lu, char *sjt, char *txt);
      ~message (void) // Destructeur class message {
         delete []adresse_expediteur;
         delete []adresse_destinataire;
         delete []sujet;
         delete []texte;   }
      
      message operator+ (const char *ad_dest) const;
// surcharge de l'opérateur +
      
      void
affMessage (void);
// afficher le message
      void encMessage (void);
// entrer le message
      void checkFormatMsg (char *tmpEnc);
// vérifie la présence d'un " @ "
      void setExpediteur (char *tmpEnc) {
         adresse_expediteur = new char[strlen(tmpEnc)+1];
         strcpy(adresse_expediteur,tmpEnc); }

      void setDestinataire (char *tmpEnc) {
         adresse_destinataire = new char[strlen(tmpEnc)+1];
         strcpy(adresse_destinataire,tmpEnc); }

      char *getDestinataire (void) {
         return adresse_destinataire; }
};

Est-ce que çà c'est juste çà, déjà ? :
message operator+ (const char *ad_dest) const; // surcharge de l'opérateur +

Ma fonction de surcharge est la suivante (est-ce bon ?) :
message message::operator +(const char* ad_dest) const {
   message msg;
   msg.adresse_destinataire = adresse_destinataire + ad_dest;
   return msg; }

En faite, je dois mettre plusieurs adresses email dans "adresse_destinataire" et je fais çà comme çà dans mon main() (=> qui doit être surment pas bon mais partout, les exemples pour la surcharge de l'opérateur + se fait avec des chiffres et non des chars  ) :
strcpy(tmpEnc,tmpEnc + getDestinataire()); setDestinataire(tmpEnc); // surcharge de l'opérateur

Voilà, je n'arrive vraiment pas à faire ces choses on ne peut plus basic .

Merci d'avance.

dimanche 4 décembre 2005 à 18:04:44 | Re : [Débutant]Surcharge opérateur +

Joky

Membre Club
On concatène avec strcat( ... )

if(!Meilleur("Joky")) return ERREUR;<

dimanche 4 décembre 2005 à 18:16:16 | Re : [Débutant]Surcharge opérateur +

Geolem

Je dois surcharger l'opérateur + et pas faire un simple strcat .

Ou alors tu voulais dire remplacer le strcpy par strcat dans mon main() ? (parce que çà ne va pas ).
dimanche 4 décembre 2005 à 18:21:34 | Re : [Débutant]Surcharge opérateur +

vecchio56

Administrateur CodeS-SourceS
message operator+ (const char *ad_dest) const;

Oui, ca m'a l'air d'être bon. L'implémentation se fait avec strcat. Sinon ca récursive
dimanche 4 décembre 2005 à 18:22:06 | Re : [Débutant]Surcharge opérateur +

Joky

Membre Club
Réponse acceptée !
message message::operator +(const char* ad_dest) const {
   message msg;
   msg.adresse_destinataire = adresse_destinataire + ad_dest;
   return msg; }

strcpy(msg.adresse_destinataire, strcat(adresse_destinaire, ad_dest));

Attention au buffer overflow;

if(!Meilleur("Joky")) return ERREUR;<

mardi 6 décembre 2005 à 16:55:57 | Re : [Débutant]Surcharge opérateur +

Geolem

Et dans mon main(), je dois faire quoi pour ajouter deux chaines de caractères l'une à l'autre ?

tmpEnc = adresse_destinataire + tmpEnc; // tmpEnc étant un tableau de char contenant qlq chose dedans.

C'est juste çà ? Parce que comme erreur j'ai :
Error C2110: '+' : cannot add two pointers

Merci...

Geolem
mardi 6 décembre 2005 à 17:02:23 | Re : [Débutant]Surcharge opérateur +

Joky

Membre Club
char Buff[512];
char *Mess = "Salut ";
strcpy(Buff, Mess);
strcat(Buff, "c'est moi la concaténation !");

MessageBox(0, Buff, 0, 0x40);

if(!Meilleur("Joky")) return ERREUR;<

mardi 6 décembre 2005 à 17:27:15 | Re : [Débutant]Surcharge opérateur +

Geolem

Bah... ou est le + qui sert de surcharge ?

Geolem
mardi 6 décembre 2005 à 20:56:34 | Re : [Débutant]Surcharge opérateur +

vecchio56

Administrateur CodeS-SourceS
Dans le main, on utilise l'opérateur +, c'est le but de la surcharge.
message m = ...;
m = m + "chaine";

Tu dois savoir qu'en général, on écrit d'abord l'opérateur +=, et on l'utilise dans operator+

Comme dit Joky, il faut bien utiliser strcat à un moment donné.

message message::operator +(const char* ad_dest) const
{
  message msg = *this;
  strcat(msg.adresse_destinataire, ad_dest);
  return msg;
}

Pourquoi ne pas utiliser std::string, qui fait tout ca un peu mieux que strcat?


Cette discussion est classée dans : message, void, adresse, char, tmpenc


Répondre à ce message

Sujets en rapport avec ce message

PROBLEME NETSEND [ par zzzzzz ] En fait j'essaye d'envoyer un message par la fonction net send via internet a ordi qui posssede xp. Si je mjet mon ip ca marche et si je met l'ip de q regardez ma source HELP [ par asnow ] BonjourJe debute en C. j'ai voulu apprendre à enregistrer des données dans un fichier, ca a donné ce code .Si vous pouviez me donner des recommandatio appel de fonctions [ par lysane ] pour alléger le code j'ai créer un fichier fonctions.cpp ou je met plusieures fonctions qui seront untilées dans une autre classe lors d'un ifexemple: Memory Pool [ par guiguikun ] Bonjour,j'ai téléchargé la partie du code source de Quake3 releasé par ID Software par curiosité.Je l'ai lu pour voir un peu comment le jeu fonctionna probleme sur une classe [ par NerOcrO ] Voici mon code :#include #include class Chanson //classe Chanson{ public: int Duree; char TypeDeFichier[3], Auteur[50], Titre[50], Interprete[50 petite question mais ke j'ai besoin [ par superoi ] bon \jour je sais que c'est con mais j'ai vraiment besoin de savoir c'est pour savoir si ca existe en c ca : long (*f)(void)(char *str); et est ce pb eof en C++ le dernier element est lu 2 fois :( [ par panini21 ] salut a tousvoila g un prog qui permet de creer une 'bibliotheque de jeux'a savoir :les renseignement du jeu sont le prix, le nom, la descriptiopn et Fonction *char [ par moustachu ] Bonjour,Je suis en train de faire évoluer une appli qui a pas de paramétrage à sortir de l'appli. Tout est codé en dir et ça craint assez (ex : strcpy chui en BUGG depuis et sans reponse [ par louatiamin ] pour ceux ki ne connaisse pas TC++ 3.0(sous dos) et ne connaisse rien sur les librairie statique ou bien le mode real 16bits c est vraiment unitile d Conversion d'adresse en char ? [ par supergrey ] Bonjour, voila mon probleme:Dans mon programme j'ai un tableau: VOID* szTemp[256]qui contient des trucs du genre: 0xcccccc59 0xcc


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales