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 :

Structure de classe : héritage ?


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut Structure de classe : héritage ?
    Bonjour à toutes et à tous!
    N'ayant malheureusement pas eu beaucoup d'occasions pour utiliser les classes, j'aimerai vous soumettre un dilemme quand à l'écriture de l'une d'elles.
    J'essai de construire une classe pour instancier un bouton avec SFML. Cette classe Button (que je crée) utilise la classe sf::Text. Je suis tenté de faire hériter ma classe Button de la classe sf::Text, mais ce serait faux dans la mesure où un boutton n'est pas un texte, mais contient du texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class Button : public sf::Text   //un bouton n'est pas un texte...
    {
    ...
    };
    Pourtant, cela me semble la solution la plus intuitive pour l'utilisateur: pour modifier le texte du bouton et ses attributs, il suffit d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Button bouton;
    bouton.setString("texte");   //setString provient de la classe sf::Text
    bouton.setCharacterSize(24); //setCharacterSize provient de la classe sf::Text
    Et je n'ai pas à re-créer toutes les fonctions pour pouvoir utiliser la syntaxe ci-dessus (fonctions qui prendraient quatres lignes, je vous l'accorde, mais il y en a une vingtaine...)
    De plus, cela permet d'utiliser les fonctions de sf::Text dans les fonctions de ma classe, et (peut-être, je n'en suis pas sur) d'utiliser sf::Text comme un objet de ma classe:
    window.draw(sf::Text);.

    Sinon, il faudrait que je déclare un objet sf::Texte texte en publique pour y accéder grâce à button.text, ce qui donnerait par exemple: button.text.setString();.
    Mais je trouve cette solution assez peu esthétique...



    Que devrais-je utiliser ? L'héritage, un objet privé, un objet publique, ou quelque-chose qui ne me viens pas à l'esprit ?

    Merci pour votre patience !

    Cordialement,
    Simac

  2. #2
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 109
    Points
    6 109
    Par défaut
    Bonjour,

    Je penche pour un objet membre sf::Text privé.

    Sur internet, j'ai trouvé ceci :
    http://pushbuttonreceivecode.com/blo...your-sfml-game

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    Merci pour le lien, très intéressant !

    Donc en privé pour une meilleur sécurité ? C'est jouable, mais long ^^

  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,

    Effectivement, on ne peut décemment pas estimer qu'un bouton soit un texte. Cela n'aurait aucun sens, et invalide donc l'idée même d'utiliser l'héritage.

    La seule solution restante est donc bel et bien une composition. D'ailleurs, tu l'as dit toi-même : un bouton contient du texte

    Par contre, tu n'es absolument pas obligé d'exposer toutes les fonctionnalités de sf::Text au niveau de ton bouton. Mieux encore, on peut décemment considérer le fait que
    1. (selon Déméter) la personne qui manipule ton bouton n'a absolument aucun besoin de savoir que le texte qui apparait est représenté par un sf::Text
    2. une fois que le texte d'un bouton est défini, il n'y a -- normalement -- plus aucune raison de vouloir le changer

    L'idée est donc de créer un bouton proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Button/* : sf::drawable //??? */{
    public:
        Button(std const & text):text_(text){
     
        }
        void draw((RenderTarget &target, RenderStates states) const override { //inherited from sf::drawable
            /* ce qui a trait au tracé du bouton "him self" */
            text_.draw(target, states);
        }
    private:
        sf::Text text_;
    };
    NOTA : Ton role, en tant que développeur d'une fonctionnalité est de te "casser la tête pour que ceux qui utilisent ce que tu as développé n'aient pas à le faire"... En prenant le temps de faire les choses correctement, tu te facilitera énormément la tâche par la suite, car "ceux qui utilisent" ce que tu as développé, ce sera très souvent ...toi et toi seul
    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 du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 81
    Points : 50
    Points
    50
    Par défaut
    C'est noté ^^

Discussions similaires

  1. [WD16] Poo - structures de classe et héritage.
    Par R&B dans le forum WinDev
    Réponses: 10
    Dernier message: 30/05/2011, 09h42
  2. [log4j] structurer par classes
    Par frouge dans le forum Logging
    Réponses: 4
    Dernier message: 25/09/2006, 11h24
  3. Structure de classe dynamique
    Par amel666 dans le forum Langage
    Réponses: 2
    Dernier message: 24/01/2006, 09h13
  4. Réponses: 8
    Dernier message: 10/09/2005, 20h12
  5. structure de class?
    Par kiko69 dans le forum C++
    Réponses: 4
    Dernier message: 13/03/2005, 14h30

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