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 de conception


Sujet :

C++

  1. #1
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut Problème de conception
    Bonjour à tous,

    J'essaie de créer une GUI en C++ avec la SDL. Pour ça, j'ai créé une classe Widget de laquelle sont dérivés tous mes contrôles.

    Dans les contrôles existants, on trouve notamment une classe FreeContainer, qui est un contrôle pouvant contenir d'autres contrôles.

    Dans ma classe Widget, j'ai une fonction virtuelle "blit(surface)" qui permet de dessiner le contrôle sur une surface (en général, il s'agit de la surface du contrôle père).

    Jusqu'ici tout va bien (du moins je crois ).

    Mais ce que j'ai essayé de faire, c'est ajouter une classe MainWindow, qui représente ma fenêtre principale. Comme il s'agit d'un contrôle visible qui peut contenir d'autres contrôles, je l'ai faite hériter de FreeContainer.

    Mon problème (qui me fait penser qu'il y a une erreur dans ma logique de conception), c'est que pour cette classe (et uniquement celle-ci), la fonction "blit(surface)" n'a pas de sens. Quand on affiche la fenêtre principale, il n'est pas nécessaire de lui indiquer sur quelle surface elle doit se recopier...

    Pour résoudre mon problème, j'ai créé dans MainWindow une fonction "blit()" et j'ai redéfini la fonction "blit(surface)", qui ignore son paramètre et exécute simplement blit(). Mais cette solution, si elle fonctionne, ne me parait pas très propre

    Qu'est-ce que vous en pensez ?
    Merci pour vos lumières !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca ne me paraît pas si idiot que ça. Surtout que c'est très simple, si tu cherches autre chose tu vas te compliquer la vie pour peut-être rien.

    Par contre inutile de créer une nouvelle fonction juste pour ignorer le paramètre, surtout si elle n'est pas appelée à partir d'ailleurs.

  3. #3
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Merci pour tes commentaires.

    Si j'ai voulu créer une nouvelle fonction blit(), c'est parce que je trouve plus propre de l'appeler que de faire un truc comme maFenetrePrincipale.blit(NULL). Mais bon, il est vrai que je pourrais m'en passer

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bon, ben s'il n'y a que moi que ça gène d'avoir une classe qui n'implémente pas vraiment toutes les fonctions de sa classe de base, je vais me faire une raison ^^

    Allez, je marque le sujet résolu et je continue mon projet

    Merci encore Laurent !

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Qu'est-ce qui t'empêche de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void blit(type_surface *surface = NULL) { }

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par Alp
    Qu'est-ce qui t'empêche de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void blit(type_surface *surface = NULL) { }
    J'y ai pensé, mais est-ce que "blit(type_surface *surface = NULL)" peut supplanter la fonction virtuelle de ma classe de base "blit(type_surface *surface)" ?

    Je me disais que puisque la signature n'était pas exactement la même, ça ne devait aps fonctionner... mais j'avoue ne pas avoir essayé

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    J'y ai pensé, mais est-ce que "blit(type_surface *surface = NULL)" peut supplanter la fonction virtuelle de ma classe de base "blit(type_surface *surface)" ?
    Oui, le prototype est le même. Par contre une bonne habitude est d'avoir les mêmes paramètres par défaut que la version de la classe mère, puisque c'est ceux-ci qui seront utilisés dans le cas d'un appel polymorphique. Mais bon à part ça, ça ne gène pas.

  8. #8
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Ok, j'ai testé et en effet ça marche. Merci beaucoup !

    Remarque : je ne veux pas avoir les mêmes paramètres par défaut que ma classe mère puisque justement dans ce contexte les classes dérivées de ma classe mère ont toujours besoin d'une surface (à l'exception de ma fenêtre principale, qui en plus est un singleton).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Méthode Finalize et problème de conception
    Par phryos dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2006, 11h04
  2. [VB6][UserControl et OCX]Problème de conception
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 19/01/2006, 22h37
  3. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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