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 :

Opérateur[ ] qui renvoie et permet d'affecter un tableau


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 46
    Points : 26
    Points
    26
    Par défaut Opérateur[ ] qui renvoie et permet d'affecter un tableau
    Bonjour!


    J'ai surchargé l'opérateur [] pour l'utiliser avec une classe personnelle qui contient un tableau.

    Suivant le contenu de ma classe, j'aimerai que l'opérateur retourne un tableau de plusieurs valeurs, et dans certain cas une seule valeur (ou un tableau à une entrée, peu m'importe). J'ai compris que déclarer float* MaClasse::operator[] permettait de faire cela... Mais:

    En plus de cela, j'aimerai pouvoir utiliser l'expression contenant l'opérateur à droite comme à gauche du égal. Cette partie là je n'ai aucun problème à le faire lorsqu'il s'agit d'une valeur (un float par exemple: float& MaClasse::operator[]), mais je n'y arrive pas avec un tableau de valeurs comme énoncé plus haut. En effet j'ai essayer float*& MaClasse::operator[], mais cela ne fonctionne pas.


    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MaClasse test();
     
    float* a;
    a = test[2]; // copie dans a les 2 premiers éléments du tableau contenu dans test
     
    float* b = new float[3];
    b[0] = (float)(rand() % 100);
    b[1] = (float)(rand() % 100);
    b[2] = (float)(rand() % 100);
    test[3] = b; // copie les valeurs de b dans les 3 premiers éléments du tableau contenu dans test
    A l'heure actuelle, j'arrive à me débrouiller avec deux méthodes distinctes (Set... et Get...).
    Mais à l'utilisation il serait plus simple d'avoir un opérateur pour faire les deux.

    Quelqu'un saurait il m'aider?!
    Merci!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Il n'est pas recommandé d'utiliser operator[] pour faire des choses comme "copier les n premiers éléments d'un tableau dans" => ça tord la signification normal de l'opérateur, donc ça complique la lecture du code, donc en fin de compte ça génère du bug...
    Il est recommandé de l'utiliser comme tel, à savoir comme accès à l'élément d'indice n
    Ceci mis à part, sache que tu prends le risque de consommer beaucoup d'aspirine sur la gestion mémoire avec des choses du genre:
    float* a = test.copy(3);
    En effet, se posent des questions comme celles qui suivent:
    1) qui doit libérer la mémoire liée à a? Pour copier n élément il faut allouer un tableau de n élément, or comme là tu n'est pas au sein d'un objet comment gères-tu la libération de cette mémoire?
    2) comment gères tu l'information sur la taille du tableau pointé par a, qui n'est stockée nulle part dans un code comme celui que tu montres, d'où des risques de "jardinage mémoire" (expression imagée pour l'effet décoiffant d'accès en lecture/écriture dans des zones mémoires dont on ignore la taille, donc l'emplacement des bornes...

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/09/2010, 13h55
  2. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 15h06
  3. function qui renvois un objet ?
    Par mattmat dans le forum ASP
    Réponses: 4
    Dernier message: 23/04/2004, 11h35
  4. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

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