begin process at 2010 02 10 03:54:55
  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 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,671 sec (4)

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