See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [C++] Les méthodes virtuelles  (Read 1708 times)

0 Members and 1 Guest are viewing this topic.

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
14 February 2011, 00:21:07
Bonjour à tous !

Je suis en train d'étudier plus en profondeur la POOH. Et là, je suis pris aux méthodes virtuelles.

Je comprends la méthode virtuelle pure (ex : virtual void Resize(LPARAM lParam) = 0) qui va créer une classe abstraite. Alors, il faudrait une classe héritée créer une méthode void Resize(LPARAM lParam) qui va définir cette méthode. Comme les classes de vaisseaux qu'on fait avec l'OAPI.

Mais ce que je ne comprend pas, c'est quand on a virtual void Resize(LPARAM lParam), sans le =0 à la fin. On peut instancier cette classe, la méthode est définie, mais elle peut aussi être définie dans une classe héritée. Là, je comprend pas à quoi ça sert et comment ça marche.

Est-ce que des maîtres du C++ pourrait m'aider là-dessus ? J'ai beaucoup lu sur Internet, mais je n'ai toujours pas compris.


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #1 - 14 February 2011, 17:50:05
Bon, j'essais plein de trucs, mais rien ne fait ce que je veux.

J'ai une classe Window qui crée une fenêtre basique. Dans les étapes de créations et les messages envoyés par Windows, je veux créer des fonctions callback, comme dans Orbiter. Alors, je crée une méthode virtuel comme ça : virtual LRESULT clbkResize(LPARAM lParam); dans ma classe Window. Cette méthode est appelée quand la fenêtre change de taille (un message WM_SIZE de Windows).

Ensuite, je crée une classe fille qui s'appelle DXWindow qui va géré ces callbacks à sa manière, pour créer une fenêtre pour DirectX 9. Cette classe a elle aussi une méthode LRESULT clbkResize(LPARAM lParam);, qui gère le redimensionnement.

Toutefois, quand j'exécute mon code, c'est la méthode virtuel de Window qui est appelée, pas celle de sa classe fille DXWindow.

Que faire ? :help:



Message modifié ( 14-02-2011 17:50 )

Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #2 - 14 February 2011, 22:14:35
Bon, j'ai réussi.

J'avais la solution, mais je faisais planter le programme. Il fallait que je crée une classe Window abstraite (avec une méthode virtual [...] =0;, mais je ne devais appeller aucune méthode abstraite durant le constructeur (ce que je faisais à cause d'un message de redimenssionnement créé par Windows).

Merci à un document de Microsoft pour m'avoir éclairé là-dessus.


« Last Edit: 14 February 2011, 22:14:35 by Bibi Uncle »
Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon