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 :
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 :
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.
Hors ligne
Hmm, attention, il ne faut pas donner à l'héritage des capacités qu'il n'a pas...
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
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
Hors ligne
Encore merci à toi, je crois avoir compris en effet
Mais dans ce cas, comment faire pour récupérer cette valeur ?
Hors ligne
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
Hors ligne
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
Hors ligne