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 :

Problème avec l'héritage et les vector


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Problème avec l'héritage et les vector
    Bonjour à tous.

    Je m'excuse de vous importuner avec mon soucis mais je n'ai malheureusement pas réussi à le résoudre par moi même et je n'arrive pas à trouver de documentation sur ce que je souhaiterais faire.
    Je suspecte donc que ce que j'ai en tête est infaisable mais bon, j'aimerais malgré tout en avoir confirmation

    Donc voila, en gros, je souhaiterais réaliser un jeu d'échec (en utilisant la librairie SDL, ce qui explique la présence des types SDL_Rect).

    Pour se faire, je suis donc parti du principe qu'il me fallait une classe "piece" qui contiendrait les informations que toutes les pièces ont en commun ( notamment leur position et leur couleur).
    Cette classe "piece" servira par la suite de base pour les classes dérivé "fou, roi, pion.. ".
    Ces classes dérivés quant à elles, détiennent une méthode "deplacement" qui leur est spécifique et qui permet de savoir ou le roi ou le pion peut se déplacer en fonction de sa position.

    Mon idée était ensuite de créer une classe joueur qui contiendrait une collection (vector) d'objet de la classe pièce, qui contiendrait donc l'ensemble des pièces dont dispose le joueur (le roi, les 2 fous etc).

    Cependant, lorsque je tente de compiler le code présent ci dessous, j'obtiens le message d'erreur suivant :"error:'piece' is an inaccessible base of 'roi'".

    Donc j'en viens à ma question, est il tout simplement possible de créer une collection d'objets de type "base" qui contiendrait des objets de classes dérivées.

    Sinon, est il possible de créer une collection qui pourrait contenir des objets différents?

    Merci d'avance et désolé pour le pavé .

    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
    57
    58
    59
    60
    61
    class piece
    {
       private :
       int positionX;
       int positionY;
       char couleur_piece;
    };
     
    class roi : private piece
    {
         private:
                SDL_Rect position_piece;
                SDL_Surface maSurface;
         public:
                void deplacement()
                    {
     
         //insérer les endroits ou le personnage peut se déplacer en fonction de sa position sur l'échiquier
                    }
                 roi(char couleur)
                {
                        if(couleur='n')
                            {
                                position_piece.x=5;
                                position_piece.y=0;
                            }
                        else
                            {
                                position_piece.x=5;
                                position_piece.y=7;
                            }
     
                }
    };
     
    class fou
    {
       private:
                SDL_Surface maSurface;
         public:
                void deplacement()
                    {
     
         //insérer les endroits ou le personnage peut se déplacer en fonction de sa position sur l'échiquier
                    }
    };
    class joueur
    {
         private:
            char couleur;
            std::vector<piece> ma_Collection_De_Piece;
         public:
           void init(char color)
                {
                   couleur=color;
                    roi a(color) ;
                   ma_Collection_De_Piece[0]=a;
                }
     
    };
    };
    PS: le code n'est pas parfait, je l'ai juste mis pour clarifier ma question .

  2. #2
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    A priori, ta classe piece n'a aucune utilité: tous ses membres sont en private, ce qui fait que personne n'y peut toucher, même pas les classes dérivées.

    Si tu veux que la classe piece soit accessible à ses dérivées, remplace le private par un protected.

    Enfin, vu que ta classe piece est plutôt un "aggrégat" de données, utiliser struct à la place de class, et sans mot-clés private/public..., serait peut-être plus adapté.

  3. #3
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Ah, et aussi:

    Si tu veux faire un test, utilise ==

    Ca arrive souvent au début, et c'est difficile à détecter

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Déjà merci d'avoir pris la peine de lire mon pavé et d'avoir répondu

    Donc comme je l'avais dit, le code est à des années lumières d'être terminé et il y aura bien évidemment des méthodes publiques dans la classe "piece" qui me permettront de récupérer les données dont j'ai besoin.

    Donc j'en reviens à ma question initiale

  5. #5
    Membre averti Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Points : 323
    Points
    323
    Par défaut
    Donc j'en viens à ma question, est il tout simplement possible de créer une collection d'objets de type "base" qui contiendrait des objets de classes dérivées.
    Oui c'est possible. C'est le design pattern composite.
    http://come-david.developpez.com/tut...page=Composite

    Par contre ça ne marchera pas comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<piece> ma_Collection_De_Piece;
    Il faut que ton vecteur contienne des pointeur de piece:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<piece*> ma_Collection_De_Piece;
    N'oublie pas de mètre en virtuel toutes tes méthodes surchargeables(i compris le destructeur).
    Et de faire tes delete de pièce avant la suppression de ton vector(a moins d'utiliser boost::ptr_vector)

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour la réponse et le tutoriel ^^

    Je vais voir comment adapter ce que tu viens de me linker pour mon programme.

Discussions similaires

  1. [Tableaux] Problème avec un array et les pseudo frame
    Par azerty53 dans le forum Langage
    Réponses: 6
    Dernier message: 10/05/2006, 14h57
  2. Problème avec l'unicode et les exceptions
    Par Rafy dans le forum C++
    Réponses: 5
    Dernier message: 07/02/2006, 00h52
  3. [VC++] Problème avec un héritage
    Par Freakazoid dans le forum Visual C++
    Réponses: 7
    Dernier message: 28/11/2005, 08h35
  4. [DEBUTANT] Probléme avec l'héritage
    Par BRAUKRIS dans le forum Langage
    Réponses: 7
    Dernier message: 16/09/2005, 20h22
  5. problème avec strtok pour récupérer les vides
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 02/06/2005, 20h08

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