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 :

un tableau partagé par 2 classes


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut un tableau partagé par 2 classes
    Bonjour

    j'ai 2 classes A et B
    je voudrais modifier le tableau des 2 classes
    "genre mon tableau en variable globale"


    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
     
    int monTableau[10];
     
    classe A
    {
         void ModifTableauA()
         {
              monTableau[5] = 4;
         }
    }
     
    classe B
    {
         void ModifTableauB()
         {
              monTableau[8] = 1;
         }
    }
    merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Ce que vous avez fait fonctionne. Mais bon, les variables globales, ce n'est pas vraiment bien (à part rare cas, voir FAQ ou débat précédents).

    Pour revenir au problème, cela est possible, si les classes acceptent un pointeur sur le tableau (ou le pointeur du tableau, à vrai dire).
    Le code sera du genre:
    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
     
    #include <cassert>
     
    class A
    {
        int* m_pTab;
        A(int* pTab)
            m_pTab:pTab
        {
            assert(m_pTab);
     
        }
     
        void foo()
        {
            m_pTab[2] = 42;
        }
    }
     
    class B
    {
        int* m_pTab;
        B(int* pTab)
            m_pTab:pTab
        {
            assert(m_pTab);
        }
     
        void foo()
        {
            m_pTab[3] = 42;
        }
    }
     
    int main()
    {
        int* pTab = new int[10];
        A a(pTab);
        B b(pTab);
     
        for ( unsigned int i = 0 ; i < 10 ; i++ )
        {
            std::cout << pTab[i] << std::endl;
        }
     
        delete pTab;
     
        return 0;
    }
    Mais, il y a certain points que je n'aime pas vraiment.
    D'abord, le tableau est partagé dans deux classes différentes et cela me chagrine (qui gère réellement le tableau, qui a des droits d'accès / d'écritures). Que se passe t'il si les deux classes modifie la même case.
    Et puis, quid des cas en multithread ...
    De plus, dans mon code, cela ne marche que pour un tableau ayant une taille de 4 minimum. Pour nous protéger de cela, j'utiliserai plutôt un std::vector, qui connait le nombre d'éléments contenus.

    Enfin voilà, je pense avoir au moins répondu à la "question" de base.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    pas facile la POO parfois
    merci de la réponse

  4. #4
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    D'abord, le tableau est partagé dans deux classes différentes et cela me chagrine (qui gère réellement le tableau, qui a des droits d'accès / d'écritures).
    Idem.
    De plus, qui est responsable de sa création ? de sa destruction ?
    Ce serait problématique d'essayer d'accéder à un de ses élément alors qu'il n'existe pas encore ou qu'il n'existe plus...

  5. #5
    Membre confirmé
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    en fait je pensais qu'on pouvait s'en sortir en utilisant les références ou pointeurs
    en réfléchissant j'ai résolu le pb autrement mais je suis peut être sorti de la phylosophie de la POO
    si un puriste pouvait me répondre à cette exemple simplifié qui fonctionne !

    ***** création d'un jeu de poker *****
    - il y a une classe Donne, une classe Joueur et une classe Dealer
    - autant d'instance Joueur que de joueur
    - dans cette classe il y a un tableau public contenant les cartes du joueur
    - la classe Donne gère la partie
    - elle passe à la Classe Dealer, par une méthode, le tableau des cartes des joueurs vides par pointeur
    - donc le tableau de la Classe Joueur contient les cartes distribuer

    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
    class Joueur
    {
       public:
       int tabCarteJoueur[2];        // je sais un attribut public c'est pas terrible
       void ContenuDetabCarteJoueur()
       {
           // j'ai vérifier : après l'appel Donneur.Distribuer...
           // ici tabCarteJoueur[0] contient bien 12;
           // ici tabCarteJoueur[1] contient bien 25;
       }
    }
     
    class Dealer
    {
       public:
       void Distribuer(int *tabCarteJoueur)
       {
           tabCarteJoueur[0] = 12;
           tabCarteJoueur[1] = 25;
       }
    }
     
    class Donne
    {
       Joueur Joueur1;
       Dealer Donneur;
       // exemple pour un joueur pour ne pas compliquer
       Donneur.Distribuer(Joueur1.tabCarteJoueur);
    }

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Personnellement, je n'aime toujours pas.

    Dans une approche beaucoup plus objet, il faudrait que le jeu de carte soit un objet (JeuDeCarte) et les cartes elle même soit des objets (Carte).
    Après, le jeu de carte, disposerai d'une fonction pioche, qui enlèverai une carte pour la donner (copie ou référence) à un joueur.
    Et c'est le JeuDeCarte qui gère les cartes (création / destruction).

    Enfin bref, mon approche n'a aucun rapport avec votre code (et elle est possiblement perfectible).
    Là, ce qui me gène, c'est que vous donner accès à un membre d'une classe, et cela vers l'extérieur de celle-ci (un pointeur vers un membre). Ca casse le principe de l'encapsulation ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre confirmé
    Profil pro
    Ingénieur système
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur système

    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    je sais bien que je ne respecte pas l'idée de base de la POO
    par contre je pense que mon analyse tient la route

    (une partie de l'analyse)
    - la classe Donne : elle conduit la partie de A à Z - elle connait le principe du déroulement du jeu
    - la classe Joueur : elle a des cartes - elle décide de qu'elle va faire en fonction de son jeu - elle a une somme de jetons
    - la classe Dealer : elle se charge de mélanger les 52 cartes - donner 2 cartes à chaque joueur - montrer le flop, turn et river

    je suis parti de cet exemple assez concret (et à la mode - poker) pour étudier la POO

Discussions similaires

  1. partager une class template par plusieurs class
    Par mazertys17 dans le forum C++
    Réponses: 6
    Dernier message: 18/03/2015, 15h27
  2. [PHP 5.2] [POO] Propriétés statiques non partagées par les classes filles
    Par gege2061 dans le forum Langage
    Réponses: 5
    Dernier message: 08/09/2009, 15h25
  3. Réponses: 4
    Dernier message: 25/10/2007, 16h04
  4. [HTML] Construire un tableau colonne par colonne ?
    Par Cthulhu 22 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 11/05/2005, 15h31
  5. URGENt: recherche dans un tableau trié par ordre alphabetiqu
    Par JulPop dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/02/2005, 17h21

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