Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1420 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  C++ et héritage (SDL)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ et héritage (SDL)

n°458236
snotling
Posté le 15-07-2003 à 12:22:02  profilanswer
 

Salut,
 
Voilà je suis en train de faire un petit programme en SDL (librairie graphique à l'origine pour les jeux) et je me prends la tête déjà depuis un moment sur un problème de classes et d'héritage.
 
Il s'agit d'un frontend à MPlayer en quelque sorte (+ émulateurs divers) pour ma DivXBox :
 
  Ecran de démarrage :
 
    - DVD   --> Clic => Lance le DVD Video
    - Films --> Clic => Liste des films s'affichent
    - Jeux  --> Clic => Liste des ROMs s'affichent
 
Comme l'écran de démarrage et les 2 autres partagent de nombreuses données comunes (un fond d'écran en SDL_Surface* par exemple), je pensais me servir de la notion d'héritage.
 
Donc : Ecran, classe de base
       Démarrage, Films, Jeux, classes dérivées
 
Seulement je ne vois pas trop comme ça marche.
Je voudrais pouvoir créer un objet de classe Démarrage (qui lancera le constructeur de Ecran, la classe de base, pour initialiser SDL entre autre) qui, suivant ce sur quoi on clique, créera un objet de type Films ou Jeux *mais* en reprenant les données membres de la classe Ecran.
 
C'est possible donc ? Je veux donc créer des objets en gardant comme "noyau central" les données membres d'un objet de la classe de base.
 
 
Merci de m'aider !
 
A+

mood
Publicité
Posté le 15-07-2003 à 12:22:02  profilanswer
 

n°460490
snotling
Posté le 17-07-2003 à 15:48:23  profilanswer
 

UP UP UP :)

n°460641
HelloWorld
Salut tout le monde!
Posté le 17-07-2003 à 17:29:03  profilanswer
 

Citation :

C'est possible donc ? Je veux donc créer des objets en gardant comme "noyau central" les données membres d'un objet de la classe de base.


 
Ben tu les met en protected.
Je vois trop le problème. Donne un peu de code.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°460883
snotling
Posté le 17-07-2003 à 20:34:13  profilanswer
 

Donc mon idée serait de faire :
 
int main(int argc, char *argv[])
{
    Demarrage().Start();
    return 0;
}
 
Je voudrais donc que ça lance automatiquement Ecran::Ecran(), pour initialiser tout SDL, et ensuite lancer la boucle de choix "DVD", "Films" ou "Jeux".
 
 
class Ecran
{
    public:
        Ecran();
 
        void DrawIMG(SDL_Surface *img, int x, int y);
 
 
        // les fonctions suivantes seront redéfinies dans chaque classe et sont donc virtuelles
        virtual void Start(); // fonction de "démarrage"
        virtual void DrawAll(); // va dessiner tous les élements graphiques par itération
        virtual void ProcessSelection(); // action à prendre lors de clic/ENTREE
        virtual void ProcessKey(); // action à prendre lors de mouvement clavier/joystick
 
 
        SDL_Event event;
 
        SDL_Surface *screen;
        SDL_Surface *background;
        SDL_Surface *text;
 
        SDL_Color black;
        SDL_Color white;
 
        TTF_Font *font;
};
 
class Demarrage : public Ecran
{
    public:
        Demarrage();
 
        void Start();
        void DrawAll();
        void ProcessSelection();
        void ProcessKey();
 
 // on rajoute en "private" les données supplémentaires spécifiques
        // à cette classe
    private:
 
        void DrawTopic(vector<string>::const_iterator &, int, int, bool);
 
        vector<string> topics;
        vector<string>::const_iterator currentTopic;
 
        SDL_Surface *rectangle;
};
 
class Films : public Ecran
{
    public:
        Films();
 
 
        void Start();
        void DrawAll();
        void ProcessSelection();
        void ProcessKey();
 
 // on rajoute en "private" les données supplémentaires spécifiques
        // à cette classe
    private:
 
        void DrawFile(vector<string>::const_iterator &, int, int, bool);
        void PopulateFiles();
        int VectorPosition(vector<string> &, string);
 
        vector<string> files;
        vector<string>::const_iterator currentFile;
        vector<string>::const_iterator topFile;
 
        set<string> extensions;
 
        SDL_Surface *up;
        SDL_Surface *down;
 
        SDL_Rect tick;
        SDL_Rect bar;
 
        TTF_Font *filesFont;
        TTF_Font *titleFont;
        TTF_Font *symbolFont;
};
 
Voilà donc les classes. Et maintenant, est-ce possible, dans Demarrage::ProcessSelection() par exemple, d'appeler Films::Start() et reprendre les données issues de la classe Ecran précédemment initialisées (et faire de même pour quand on reviendra "en arrière" à l'écran de démarrage).
 
J'espère que c'est pas trop confus :-)

n°461580
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2003 à 14:27:26  profilanswer
 

Visiblement, tu ne connais pas trop l'héritage, avant de continuer, trouve-toi un bouquin et lis ... Ca fait pas de mal ...
 
juste une précision : le mot-clé virtual ne te permet pas d'avoir des fonctions sans corps ... Il faut que la fonction soit déclarée virtuelle pure dans ecran, exemple :

Code :
  1. virtual void Start() =0;


 
Pour ce qui est des attributs publics de ta classe ecran, tu préfèreras sans doute les voir derrière un simple protected ... Mais j'imagine que tu ne connais pas, alors bonne lecture ... ;)


Message édité par theshockwave le 18-07-2003 à 14:28:56

---------------
last.fm
n°462733
Mc Kagan
Posté le 20-07-2003 à 13:37:03  profilanswer
 

theShOcKwAvE tu m'as coupé l'herbe sous le pied.  
Rien à redire :sol:  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  C++ et héritage (SDL)

 

Sujets relatifs
Affectation template & héritageEcrire structure dans un fichier + héritage
probleme a la compilation pour afficher une fenetre avec SDL et opengl[C/C++] SDL
[C++] Objet / héritage : cherche exerciceest-ce que SDL permet l'affichage de fenetre ?
C++ constructeur et heritage ...[ Python ] Problème héritage # 4 (- update- )
héritage et surchage d'opérateurHéritage et destructeur
Plus de sujets relatifs à : C++ et héritage (SDL)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR