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 :

Remplir un Tableau d'objets


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Remplir un Tableau d'objets
    slt à tous
    j'aurais besoin de votre aide pour Résoudre mon prob :
    voila ,j'ai une Classe Reservation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Reservation {
    private:
    int numreservation;
    sring nomclient;
    Date datereservation;
    };
    je voudrais faire une autre classe ( class Livrehotel qui contient 5 Reservation) .
    Et j'ai voulu faire une fonction pour la saisis de ces 5 réservations en déclarant dans la class Livrehotel un Tableau (3 D) de type Réservation mais je n'ai pas su comment le remplir vue que la class Reservation contient 3 variables.

    Quelque idées?

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Tout simplement en ajoutant à ta classe un constructeur qui prend les 3 arguments et initialise les variables internes avec.
    En revanche, je n'ai pas compris ce que tu entends par la classe Livrehotel a un Tableau (3 D) de type Réservation . Un std::vector<Reservation> ou un std::list<Reservation> suffisent ? Qu'entends-tu par un tableau 3D ?

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour;
    ce que , a part la Class Reservation, je veux déclarer une autre classe Livrehotel qui a comme membre Privé (un tableau de 5 Reservation) mais je n'ai pas reussi a remplir ce tableau car il es de type Reservtion(donc il doit contenir les 3 donnée membre de la classe Reservation)et c'est pour cela que j'ai pensé a Déclarer Dans la classe LivreHotel de Declare un tableau avec 3 Dimension vue que les donnéés membre de la classe Reservation sont 3.

    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Reservation {
    private:
    int numreservation;
    sring nomclient;
    Date datereservation;
    };
     
    class LivreHotel
    {
     
    private:
    Reservation Tab[5];
    };
    logiquement le tableau Tab doit etre remplit par des données de Type Resevation , qui sont en faite 3 donnéés membres , alors ma question est comment le remplir?

    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut, et bienvenue sur le forum.

    Visiblement, tu as tendance à penser en terme de données nécessaires à ta structure, à l'instar de ce qui se fait en programmation procédurale plutôt qu'en terme de services attendus par ta classe, comme il est conseillé de le faire en orienté objet.

    Que tu aies besoin de 5, 15 ou 150000 réservations dans ton livre n'a strictement aucun intérêt, ou, du moins, qu'un intérêt très limité.

    Ce qui t'intéresse dans le livre de l'hotel, c'est... de pouvoir rajouter des réservations (une à la fois, visiblement), de pouvoir les lister (en fonction d'une date et... de pouvoir les contrôler.

    C'est en effet quand un client téléphone pour dire "bonjour je voudrais réserver une chambre pour le..." qu'il faut:
    1. vérifier s'il y a une chambre de disponible (en... vérifiant les réservations existantes)
    2. Créer une réservation commençant à la date indiquée (s'il y a une chambre de disponible, évidemment)
    3. ajouter cette réservation dans le livre

    La meilleure solution pour arriver à cela est, déjà, de ne pas utiliser un tableau de taille fixe comme tu semble vouloir le faire, mais bien d'utiliser, au minimum, une collection dynamique.

    Et c'est là qu'intervient la remarque de 3DArchi sur les std::vector ou les std::list : il faut, au maximum, éviter d'avoir recours aux possibilités du C (en utilisant, par exemple des tableau " C style " )s'il existe une possibilité propre au C++ permettant de faire les choses correctement, et, bien souvent, de manière plus sécurisante.

    Il y a en effet un problème sur lequel tu semble avoir tout à fait fait main basse:

    Si même tu détermine un nombre fixe de réservation que tu peux avoir en même temps (ce qui est, en soit, illogique vu que... rien n'empêche un client de vouloir réserver dans trois mois...), il se peut parfaitement que... toutes les réservations prévues n'existent pas à un instant T...

    En travaillant avec un tableau C style, le seul moyen de travailler qui te permettrait de gérer... l'inexistence d'une réservation serait de... travailler avec un tableau de pointeurs vers des réservations et d'avoir recours à l'allocation dynamique de la mémoire pour les créer: l'existance de la réservation étant testée par le fait que... le pointeur pointe vers une adresse mémoire valide ou non...

    Tout cela est de nature à compliquer énormément la programmation et, surtout, source d'erreurs et d'embêtements sans noms.

    Quand on sais que C++ propose des solutions qui permettent de nous éviter ce genre de soucis, il serait dommage de ne pas en profiter

    Ainsi, il existe une classe, disponible dans l'espace de noms std par inclusion du fichier d'en-tête <vector> et nommée... vector qui réagit exactement comme un tableau C style (il est possible d'accéder aux différents éléments contenus en accès aléatoire en indiquant l'indice recherché entre []) mais qui fournit une série de fonctions membres qui facilitent l'ajout, l'insertion et la suppression d'éléments.

    Ta classe LivreHotelpourrait donc ressembler à quelque chose de fort proche de
    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
    class LivreHotel
    {
        public:
            /* fonction permettant de rajouter une réservation */
            void nouvelleReservation(std::string const &nom, Date const & date)
            {
                /* il serait éventuellement pas mal d'avoir une vérification 
                 * de la possibilité d'accepter la réservation que l'on s'apprete
                 * à inscrire au registre
                 */
                /* le numéro de réservation correspond... au nombre de
                 * réservations déjà présentes dans le livre +1
                 */
               int num = tab_.size()+1;
               /* créons une nouvelle réservation */
               Reservation nouvelle(num, nom, date);
               /* et ajoutons la en fin de tableau */
               tab_.push_back(nouvelle);
     
            }
        private:
            /*le membre qui permet de fournir le service attendu : un tableau
             * de réservations dont la taille est géré automatiquement
             */
            std::vector<Reservation> tab_;
    };
    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

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    slt,
    je vais essayer d'utiliser la notion de Vector dans mon programme (c'est une nouvelle notion pour moi, je dois mettre à jour mes connaissance ), c'est plus simple que mon idée.
    Merci

Discussions similaires

  1. [JAVA] remplir BufferedImage par un tableau d'objet
    Par amivb dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 13/05/2015, 20h34
  2. Remplir un objet dans un tableau d objet
    Par biohazard401 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 03/11/2013, 12h38
  3. Problème pour remplir un tableau d'objet
    Par bobinouze dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 26/12/2009, 18h55
  4. [VB6]Tableau d'objet withevents
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/02/2004, 19h44
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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