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 :

Passage de tableau de pointeurs vers objets


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 31
    Points
    31
    Par défaut Passage de tableau de pointeurs vers objets
    Bonjour,

    J'ai une fonction qui prend comme argument un tableau de pointeurs vers des objets de type coord. Dans cette fonction, je dois copier ce tableau dans un autre, qui appartient à la classe.

    J'ai essayé comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    coord* coins[4];   // variable de classe, déclarée dans l'en-tête
    void rectangle::setCoord(coord*c[]){
          coins = c;
     
    }
    Mais j'ai une erreur de compilation, du genre "ne peut convertir coord** en coord*[4]".

    J'ai donc fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    coord* coins[4];   // variable de classe, déclarée dans l'en-tête
    void rectangle::setCoord(coord*c[]){
          for (int i = 0; i<4; i++){
              coins[i] = c[i];
          }
    }
    Mais je trouve cela dommage de devoir recopier tout le tableau élément par élément. En fait, j'aimerais simplement passer un pointeur vers ce tableau, et comme j'ai lu qu'un tableau était en fait un pointeur, c'est ce que je croyais faire... Bref, je ne situe pas bien le problème.

    Merci d'avance pour vos éclaircissements! Et bon week-end.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Mais je trouve cela dommage de devoir recopier tout le tableau élément par élément
    Dans la mesure où tu ne veux pas que pointer sur les éléments passés en paramètre (qui sait ce que devient le tableau après l'appel ?), c'est bien une copie que tu dois effectuer.

    comme j'ai lu qu'un tableau était en fait un pointeur
    Non. Ce qui est vrai, c'est qu'un tableau est convertible implicitement en un pointeur vers son premier élément.

    D'autre part tu devrais vraiment éviter tous ces pointeurs inutiles. Une coordonnées c'est 2 ou 3 valeurs, ça se manipule très bien par valeur.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Ce qu'on sait sur un tableau C, c'est que :
    1. Un tableau Cne peut être passé directement par valeur,
    2. Un tableau Cest implicitement convertible en un pointeur vers son premier élément.

    Donc en fait, si tu as une fonction qui prend "un tableau" en paramètre, elle prend en fait l'adresse de son premier élément.

    Si ton tableau a une taille fixe, tu peux utiliser un pointeur sur tableau, qui a une syntaxe pas toujours facile à maitriser.

    Mais je te conseille plutôt d'utiliser un std::vector, ainsi tu pourras sans problème utiliser des pointeurs sur std::vector, et ça marchera toujours, que ce soit sur taille fixe ou variable.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Laurent Gomila
    D'autre part tu devrais vraiment éviter tous ces pointeurs inutiles. Une coordonnées c'est 2 ou 3 valeurs, ça se manipule très bien par valeur.
    Quels sont les pointeurs inutiles?
    Une fontion ne pouvant retourner qu'une variable, il faut que celle-ci contienne 2 coordonnées, d'où mon objet "coord".

    Tks

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Et en C++, un tel objet peut être retourné par valeur, c'est même courant.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce que je voulais dire c'est que tes objets coord peuvent être manipulés par valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    coord coins[4];   // variable de classe, déclarée dans l'en-tête
    void rectangle::setCoord(coord c[]){
          for (int i = 0; i<4; i++){
              coins[i] = c[i];
          }
    }
    Dans la classe coord tu stockes deux int, pas deux int*. Fais pareil pour ta classe rectangle

Discussions similaires

  1. Tableau de pointeurs vers des objets
    Par rdtech dans le forum Débuter
    Réponses: 2
    Dernier message: 17/02/2013, 19h30
  2. Réponses: 2
    Dernier message: 18/07/2010, 11h43
  3. Réponses: 4
    Dernier message: 04/02/2007, 00h06
  4. Réponses: 2
    Dernier message: 12/10/2006, 20h28
  5. Tableau de pointeurs sur objets
    Par bassim dans le forum C++
    Réponses: 11
    Dernier message: 13/12/2005, 19h45

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