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 :

redimension de tableau et surcharge operateur


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut redimension de tableau et surcharge operateur
    Bonjour,

    Pour l'énoncé je ne dois pas utilisé la class vector

    Je possède un pointeur de tableau d'objet de 4 éléments au départ, qui doit être redimensionné en fonction de la lecture d'une db.

    j'ai une fonction membre Add qui me permet d'incrément une variable membre de l'objet a chaque passage de boucle(ou lecture de db).

    la classe
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    class Utilisateur
    {
        private:
        int _numutilisateur;
        int _compteur;
        string _nom;
     
        public:
        Utilisateur();
        ~Utilisateur(){}
        Utilisateur operator++();
     
        void setNom(const string value){_nom = value;}
        void setNumUtilisateur(int value){_numutilisateur = value;}
        void Add(){++_compteur;}
     
        int Count()const {return _compteur;}
        int GetNumUtilisateur()const{return _numutilisateur;}
     
        string GetNom()const{return _nom;}
     
    };
     
    Utilisateur::Utilisateur():_compteur(0){}
     
    Utilisateur Utilisateur::operator++()
    {
        //++_compteur;
        Utilisateur user;
        user.Add();
        return user;
    }
    le traitement
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    int main(){
     
        int TailleAllocation = 4, ElementsUtilise = 0;
        int ElementsMaximunAutorise = TailleAllocation;
     
        //Représente une table de base de données
        string elements[7][2] = {{"1","Nom 1"},{"2","Nom 2"},{"3","Nom 3"},{"4","Nom 4"},{"5","Nom 5"},{"6","Nom 6"},{"7","Nom 7"}};
     
        //Declare un pointeur de tableau d'objet de classe utilisateur
        Utilisateur *pUsers = new Utilisateur[TailleAllocation];
     
        //Nombre elements dimension 1
        int dim1 = sizeof(elements) / sizeof(*elements);
     
        //Nombre elements dimension 2
        //int dim2 = sizeof(*elements) / sizeof(*(elements[0]));
     
        //Lecture de la table de base données pour le test
        for(int i =0; i < dim1; i++)
        {
            int index = ElementsUtilise++;
     
            pUsers[index].setNumUtilisateur(toInt(elements[i][0]));
            pUsers[index].setNom(elements[i][1]);
     
            pUsers->Add();
     
            //Utilise la surcharge d'operateur
            //++pUsers;
     
            if(ElementsUtilise == ElementsMaximunAutorise)
            {
                //Declare un pointeur de tableau d'objet utilisateur
                Utilisateur *pTempo = new Utilisateur[ElementsMaximunAutorise+TailleAllocation];
     
                //Effectue une copie
                for(int IndiceCopie = 0; IndiceCopie < ElementsMaximunAutorise; IndiceCopie++)
                {
                    pTempo[IndiceCopie] = pUsers[IndiceCopie];
                }
     
                delete[] pUsers; //Supprime le pointeur de tableau
                pUsers = pTempo;
                ElementsMaximunAutorise+=TailleAllocation;  //Nouvelle Taille
            }
        }
     
        //Affiche les données
        for(int i = 0; i < pUsers->Count(); i++)
        {
            cout << "[" << pUsers[i].GetNumUtilisateur() << "] [" << pUsers[i].GetNom() << "] " << &pUsers[i] << endl;
        }
     
        return 0;
    }
    jusqu ici tout cela fonctionne normalement.
    Mais lorsque je cherche a surchargé un opérateur++ pour incrémenté, rien a faire cela ne fonctionne pas.

    merci

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Pour réinventer le roue ?
    Les vecteurs sont faits pour toi.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    Pour réinventer le roue ?
    Les vecteurs sont faits pour toi.
    J'aurais voulu envoyer un MP à Luc Lermith pour lui expliquer mon profond désaccord avec sa réponse, mais sa boite de messages est pleine.
    Donc, je confirme mon désaccord. Mon argumentation est à votre disposition. Tant pis si ça me vaut une exclusion, mais au moins j'aurais dit ce que je pensais.
    Bonne soirée, cordialement.

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    J'aurais voulu envoyer un MP à Luc Lermith pour lui expliquer mon profond désaccord avec sa réponse, mais sa boite de messages est pleine.
    Donc, je confirme mon désaccord. Mon argumentation est à votre disposition. Tant pis si ça me vaut une exclusion, mais au moins j'aurais dit ce que je pensais.
    Bonne soirée, cordialement.
    Tu peux aussi la rendre publique, ton avis nous intéresse. Les forums sont fait pour s'exprimer et accessoirement progresser.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    @Luc: Pour un vraie programme je suis d'accord, mais c'est peut-etre un exercice pédagogique. Dans ce cas, il DOIT peut-etre réinventer la roue.

    @Pierre Dolez: Tu pourrais développez un peu ? Parce que réinventer la roue tout le temps me semble contre-productif au plus haut point.

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    +1 à flo et David.
    Effectivement, quand il s'agit d'un aspect pédagogique cela se tient. C'est un exercice intéressant et à faire au moins une fois. Mais cela ne reste que cela : un exercice.
    Par défaut, j'assume toujours le cas "non exo", un peu par provocation, j'avoue. ^^'

    [Après, je pense sincèrement qu'il est aberrant de reinventer la roue en production, surtout quand elle est standard et disponible, parce que: - nous ne sommes pas payés pour, cela sera toujours plus inefficace (j'ai eu l'occasion de réduire une exécution de plus de 24h (mes doigts finirent par glisser sur un kill -9) à 20 minutes à cause de ce fichu NIH qui avait foiré l'écriture de resize()), cela sera toujours moins robuste. Il reste des cas rares où l'on n'a pas le choix.]

    <HS>
    Quant à ma BAL, oui elle est pleine. J'ai fini par laisser tomber de la vider de choses que je tiens à garder. En général je renvoie un MP pour inciter à me contacter directement quand je reconnais le pseudo comme celui d'un habitué, ou de poster sur le forum quand c'est à teneur technique. Ici cela me parait suffisamment à teneur technique.
    Les raisons sont multiples :
    - d'autres que moi peuvent répondre, apporter des arguments en désaccord, ou juste une autre vision tandis que je serai offline.
    - les forums ne doivent pas être en écriture seulement. Un réponse à un problème doit pouvoir profiter à ceux qui se souviennent de la netiquette : chercher une réponse avant de poser une question.
    D'où ma signature.

    PS: j'espère bien que ton opinion ne te vaudra aucun exclusion. Cela serait bien le comble.
    PPS: Luc suffit amplement, sinon c'est "Hermitte" quand on y tient. Merci.
    </HS>
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Pour l'OP, vu qu'il semble s'agir d'un exo.
    Il y a trop de choses non réunies ensemble pour que j'ai la force de plonger dans le code. Je t'invite vivement à crée une classe à la vector.
    - Elle fournira un accès [] à ses éléments,
    - Elle saura combien d'éléments elle contient
    - Son destructeur libèrera la mémoire,
    - Elle supportera une fonction pour ajouter des nouveaux éléments. Cette fonction redimensionnera le tableau interne au besoin -- c'est à dire si tu distingue capacité et taille.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  8. #8
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    bonsoir,

    Je confirme, cela est effectivement un exercice. Mais c'est pas grave.
    La question général de l'exercice est développé un tableau d'objet de classe (utilisateur avec les membres fournis) unidimensionnel pouvant être redimensionné. l'exemple doit être alloué sur la pile et sur le tas et sans l'utilisation de vector,list et map.

    j'ai pris la liberté de simulé l'extraction d'une db pour l'exercice. Cette exercice doit nous mener a la réalisation d'une class Tableau ultérieurement.

    Pour ma part coté pile c'est ok. Mais coté tas lorsque je passe avec les pointeurs je ne comprend pas pourquoi la surcharge d'opérateur ne fonctionne pas.

    merci

  9. #9
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    o_O
    Incrémenter un utilisateur n'a aucun sens.
    Ajouter un utilisateur à une liste (ou une autre), oui.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    peuuuuf, sacrée perte de temps à joué sur les mots !

    donc l'incrémentation est uniquement pour comptés mes utilisateurs puisque mon tableau est redimensionnée et toujours dans l'optique de la réalisation de cette class tableau.

    pourquoi compté les utilisateurs, je sais pas, y a cas demandé a l'intervenant du cours.

  11. #11
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Ce n'est pas aux utilisateurs de se compter. C'est à la liste qui les englobe d'en connaitre la quantité. JE ne joue pas sur les mots. Je distribue les responsabilités. C'est ce qui fait la différence entre un truc simple et qui marche et un truc compliqué que personne ne comprend comment ça marche.

    A moins que ton prof t'ai explicitement demander d'utiliser la surcharge d'opérateur pour cela, oublie.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. surcharge operateur delete et héritage
    Par Hervé dans le forum C++
    Réponses: 5
    Dernier message: 29/03/2006, 13h59
  2. Surcharge operateur =
    Par rulianf dans le forum C++
    Réponses: 9
    Dernier message: 23/02/2006, 00h32
  3. [debutante] surcharge operateur <<
    Par norkius dans le forum Débuter
    Réponses: 3
    Dernier message: 24/10/2005, 12h20
  4. [Surcharge]Operateur<< avec une classe maison
    Par KeNnEdY dans le forum C++
    Réponses: 6
    Dernier message: 14/09/2005, 15h51
  5. surcharge operateur && pointeurs
    Par le y@m's dans le forum C++
    Réponses: 6
    Dernier message: 10/05/2005, 15h57

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