#0 

07-12-2008 15:56:10

endering
Membre
Date d'inscription: 20-11-2008
Messages: 35

Bonjour à tous encore une fois,
J'ai essayé de me lancer un peu plus dans l'héritage de classes pour aérer mon code.
J'ai donc une classe mère CGame.h :

Code:

class CGame
{
public :

    CGame();
    int init();
    void load();
    void drawJeux(int *lastFPS);
    bool deviceRun();
    void CGame::closeDevice();

protected :

    irr::IrrlichtDevice *m_device;
    irr::video::IVideoDriver *m_driver;
    irr::scene::ISceneManager *m_scenegraph;
    irr::gui::IGUIEnvironment *m_gui;
    irr::scene::ICameraSceneNode *m_camera;
    irr::video::ITexture *m_viseur;
    CEventReceiver m_receiver;
    int m_large, m_haut, m_etat;
    char m_i;
};

et une classe fille CMenu.h :

Code:

class CMenu : public CGame
{
public :

    CMenu();
    bool afficheMenu();
    void drawMenu();

protected :

};

J'ai bidouiller un peu tout ça pour voir, et dans la classe CGame je fais par exemple :

video::IVideoDriver *driver = device->getVideoDriver ();
m_driver = driver;

et dans la classe CMenu.cpp ça bloque lorsque je fais par exemple :

video::IVideoDriver *driver = m_driver;
driver->beginScene (true, true, video::SColor (255,255,255,255));

Ca ne plante pas à la compilation mais renvoie une belle erreur pendant le programme.
Je n'ai surement pas du choisir la meilleur méthode, ça c'est sûr, donc je suis à l'écoute de vos conseil.


" N´essaye pas. Fait le, ou ne le fait pas. Il n´y a pas d´essai." - Yoda

Hors ligne


#1 

07-12-2008 16:33:15

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Hmm, attention, il ne faut pas donner à l'héritage des capacités qu'il n'a pas... wink

Si tu définit un objet, issue d'une classe, genre CGame *game, puis en suite tu fait une initialisation comme tu le donnes,
donc genre
video::IVideoDriver *driver = device->getVideoDriver ();
game->m_driver = driver;


Et qu'en suite, tu créé un objet, genre CMenu *menu, alors ce n'est pas pour autant que la valeur que tu as
initialisé dans game se retrouvera par là même dans menu. Il te faut aussi donc faire une fois
video::IVideoDriver *driver = device->getVideoDriver ();
menu->m_driver = driver;


Je ne sais pas si je me fais bien comprendre hmm

L'heritage, n'est la que pour permettre à une classe d'hériter des méthodes et variables définis d'une autre classe,
mais elle n'hérite en rien des valeurs d'une classe existante...

Ou alors je n'ai pas bien saisie le sens de ta question wink


Force et sagesse...

Hors ligne


#2 

07-12-2008 16:45:06

endering
Membre
Date d'inscription: 20-11-2008
Messages: 35

Encore merci à toi, je crois avoir compris en effet neutral
Mais dans ce cas, comment faire pour récupérer cette valeur ?


" N´essaye pas. Fait le, ou ne le fait pas. Il n´y a pas d´essai." - Yoda

Hors ligne


#3 

07-12-2008 16:50:56

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

Tu as plusieurs possibilités pour cela.
Soit tu passe par créé un classe globale Game, cette méthode n'est pas trop
appréciée des puriste, mais elle a le mérite d'être simple.

Sinon, à toi de faire un constructeur de ta classe 'Menu' qui aspire certaines
valeurs nescessaire et systématiques, genre

CMenu(video::IVideoDriver *driver);


et quand tu instancie un objet, il suffit d'écrire CMenu *menu = new CMenu( driver );
Les possibilités sont finalement assez vastes, elles dépendent beaucoup aussi de l'architecture
globale de ton projet de de l'emploi des classes que tu fais wink


Force et sagesse...

Hors ligne


#4 

07-12-2008 17:02:50

endering
Membre
Date d'inscription: 20-11-2008
Messages: 35

En fait j'avais tout mis dans la classe CGame, ce qui fonctionnait bien mais c'est un peu comme cacher le bordel sous son lit au lieu de tout ranger, le main était claire mais on ne pouvait pas en dire autant de CGame du coup ...

Je vais essayer la deuxième méthode, et merci encore smile


" N´essaye pas. Fait le, ou ne le fait pas. Il n´y a pas d´essai." - Yoda

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
28 invités en ligne
Aucun membre connecté
RSS Feed