IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Surchage des opérateurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut Surchage des opérateurs
    Je ne comprends pas très bien comment utiliser "Operator" et je dois faire ceci:

    "La concaténation de chaînes de caractères nécessite deux opérandes: les deux chaînes devant être concaténées. Nous avons illustré dans ce chapitre comment implanter un opérateur de concaténation surchargé sur un second objet Chaine situé à la droite d'un premier objet Chaine, modifiant ainsi celui-ci. Dans certaines applications, il est souhaitable de produire un objet Chaine concaténé sans modifier les arguments Chaine. Implantez operator+ afin de permettre des opérations telles que:
    chaine 1 = chaine 2 + chaine3;"

    J'essaie d'apprendre le C++ par moi même, je n'ai donc pas la possiblité d'avoir de l'aide de quelqu'un d'autre. J'espère que vous pourrez m'aider avec ce problème.

  2. #2
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    la surcharge de l'opérateur + se fait en surchargant la fonction éponyme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Chaine operator+( Chaine const& a, Chaine const& b )
    {
       Chaine resultat;
     
      // ton code;
     
      return resultat;
    }

    De manière canonique, ces opérateurs s'implantent en fonctiond e leur version assignante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Chaine operator+( Chaine const& a, Chaine const& b )
    {
      Chaine resultat(a); // constructeur de copie
      resultat += b;
      return resultat;
    }
    += se défniti comme une méthode de Chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Chaine
    {
      public:
      // plein de truc
     
     
      Chaine& operator +=( Chaine const& x )
     {
        // code pour concatener
     
       return *this; 
     }
    De manière générale, les opérateurs binaires pour lesquels l'argument gauche n'a pas de responsabilité particulière (ie tous sauf les opérateurs à base de =) s'implantent sous forme de fonctions libres. Les opérateurs unaires ou ceux où le membre gauche a un role particulier s'implantent comme des méthodes d'instances.

    Fonctions libres :
    + - / * % >> << == != < > <= >=

    Méthodes:
    , = += -= *= /= %= >>= <<= [] () -> ->* * .* ! ~ -- ++
    + unaire - unaire

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je vais apporter une autre réponse à Elixx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
      char Chaine1[16];
      char Chaine2[16];
      strcpy(Chaine1,"Bonjour");
      strcpy(Chaine2," monde");
      strcat(Chaine1,Chaine2);
    //alors Chaine1 est MODIFIE
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
      char Chaine1[16];
      char Chaine2[16];
      char Result[32];
      strcpy(Chaine1,"Bonjour");
      strcpy(Chaine2," monde");
      strcpy(Result,Chaine1);
      strcat(Result,Chaine1);
    //alors Chaine1 n'est  pas MODIFIE
    }
    On aurait aussi pu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
      AnsiString Chaine1=AnsiString("Bonjour");
      AnsiString Chaine2=AnsiString(" monde");
      AnsiString Result=Chaine1 + Chaine2;
     
    //AnsiString est une classe de Borland 
    //Pourquoi réinventer la roue?
    }
    De toute façon une chaine est une suite de caractères terminée par le caractère '\0'.
    La chaine est caractérisée (ou connue, quelque soit le synonyme) par un pointeur sur le premier caractère.
    Dans tous les cas, une concaténation de chaine est réalisée à un moment quelconque par un strcat().
    Je crois qu'on aurais pu répondre tout à fait en détail à la question si on savait quelle méthode avait été utilisée (ou plutôt quelle syntaxe) dans l'illustration de la concaténation avec modification.

    En tout cas, bon courage pour apprendre le C++ seul. A mon avis il vaudrait mieux commencer par le C K&R.
    Dernière modification par gl ; 24/05/2010 à 18h26.

  4. #4
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    ce n'est pas trop le problème là ... et pour info, on est dans la catégorie C++. La catégorie C est à coté.

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    //AnsiString est une classe de Borland
    //Pourquoi réinventer la roue?
    Je comprends très bien l'intérêt de ne pas réinventer la roue (enfin en général, ici il s'agit visiblement d'apprentissage), mais tant qu'à faire autant utiliser les types standard (donc std::string) plutôt que les extensions de tel ou tel compilateur qui ne sont pas portables.

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2006, 10h39
  2. Union des opérateurs IN et LIKE
    Par PapyCrouton dans le forum Langage SQL
    Réponses: 5
    Dernier message: 08/08/2006, 16h28
  3. [SQL] Utilisation des opérateurs SQL plutôt que PHP
    Par php_newbie dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/05/2006, 11h38
  4. redéfinition des opérateurs en C++
    Par apan dans le forum C++
    Réponses: 11
    Dernier message: 27/03/2006, 15h58
  5. implémentation des opérateurs de comparaison
    Par niko8181 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 28/04/2005, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo