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 :

classe vecteur : affectation de ses elements et surcharge de l'operateur =


Sujet :

C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Par défaut classe vecteur : affectation de ses elements et surcharge de l'operateur =
    bonjour,

    Je suis en train d'ecrire une classe vecteur (ayant pour membre la taille et un pointeur sur des double), et je desire initialiser chacun de ses elements avec la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Vecteur v(5);  // un vecteur de 5 elements
    v = 1.2, 2.5, 0.2, 3.0, 4.8;  // definition de chacun de ses 5 elements
    Je desire savoir si c'est possible, et si oui, comment.

    Je ne suis pas contre un syntaxe du style v(1.2, 2.5, 0.2, 3.0, 4.8) pour faire la meme chose, mais j'aime bien la premiere

    merci

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est possible, il faut surcharger l'opérateur ',' mais c'est pas pour un débutant, donc ça dépendra de ton niveau !

  3. #3
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par d'Oursse
    bonjour,

    Je suis en train d'ecrire une classe vecteur (ayant pour membre la taille et un pointeur sur des double), et je desire initialiser chacun de ses elements avec la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Vecteur v(5);  // un vecteur de 5 elements
    v = 1.2, 2.5, 0.2, 3.0, 4.8;  // definition de chacun de ses 5 elements
    Je desire savoir si c'est possible, et si oui, comment.
    C'est possible. Il faut se rendre compte que c'est parsé comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((((v= 1.2), 2.5), 0.2), 3.0), 4.8;
    donc on surcharge l'opérateur = en faisant en sorte qu'il retourne un proxy et on surcharge l'opérateur, du type proxy pour que ça fonctionne. Je ne peux pas dire que je conseille.

    Je ne suis pas contre un syntaxe du style v(1.2, 2.5, 0.2, 3.0, 4.8) pour faire la meme chose, mais j'aime bien la premiere
    Surcharger l'opérateur () avec une interface variadique. C'est un peu piègeux à l'utilisation (il faut que le nombre d'arguments soit bon, et qu'ils soient du bon type).

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Par défaut
    j'ai ecrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
      Vector& operator= (double val)
        {
          data_[0] = val;
          return *this;
        }
     
      Vector& operator, (double val)
        {
          static int i = 1;
     
          data_[i++] = val;
     
          return *this;
        }
    apparemment, ca marche . Y a-t-il mieux, comme code pour faire ceci (a part ajouter des exceptions lorsque qu'il y a trop d'elements fournis) ? La variable statique me gene, mais je ne vois pas comment je pourrais faire autrement

    merci

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    En utilisant un proxy et pas le vecteur directement, mais comme tu n'as pas l'air de maîtriser le C++, ne passe pas par cette solution.

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Par défaut
    je veux bien apprendre Y aurait-il un petit lien vers ce qu'est un proxi ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par d'Oursse
    j'ai ecrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      Vector& operator, (double val)
        {
          static int i = 1;
    
          data_[i++] = val;
    
          return *this;
        }


    Outre le fait que c'est une horreur, tu n'as pas dû beaucoup tester : i ne vaudra 1 qu'une seule fois ... donc ça ne marchera qu'une seule fois !

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Par défaut
    damned, avec 2 vecteurs, c'est vrai. Mais ca peut s'arranger.

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    boost assign est là pour ce genre de choses

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    En modifiant quelque peu la structure de ton vector, on *devrait* pouvoir arriver à un résultat un peu plus honnete (miles-->désolé, je m'attaquerai au sujet des proxi plus tard, promis )

    Rajoutons donc un (unsigned) int nommé "DernierDeclare", et initialisons le, dans le constructeur, à 0.

    La surcharge de ton opérateur , pourrait devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Vector& Vector::operator, (double val)
    {
        ++DernierDeclare;
        //autant tester que l'on ne dépasse pas la taille
        if(DernierDeclare==Taille)
        {
             //faudra réallouer une taille supérieure ici ;-)
        }
        data_[DernierDeclare]=val;
        return *this;
    }
    J'avoue etre quelque peu fatigué, donc il est vraissemblable que je n'aie pas forcément pensé à tout...

    Mais cette solution semble déjà plus réaliste que le static int
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 18
    Dernier message: 03/12/2010, 17h37
  2. Parcourir un fichier XML et retourner ses elements
    Par Ya7yaKech dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/02/2009, 01h41
  3. classe matrice et classe vecteur
    Par yucef83 dans le forum C++
    Réponses: 4
    Dernier message: 20/05/2008, 13h01
  4. Réponses: 4
    Dernier message: 23/04/2006, 11h36
  5. Réponses: 6
    Dernier message: 28/09/2005, 12h30

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