OVH Cloud OVH Cloud

Polymorphisque avec les types managés

2 réponses
Avatar
Christophe.Azemar
Bonjour =E0 tous,
voici mon probl=E8me auquel j'esp=E8re vous pourrez me r=E9pondre.

Je d=E9veloppe un logiciel disposant d'un GUI. Pour cela j'ai une
fenetre (Form) qui poss=E8de un panel, lequel change selon les actions
de l'utilisateur.
Je souhaite pouvoir acc=E9der =E0 des fonctions du Panel depuis mon Form.


J'ai d=E9fini une classe HMIPanel, qui h=E9rite de panel et qui contient
3 fonctions nextState,previousState et getState.

Code :
-----------
HMIPanel.h
-----------
namespace HMI {public ref class HMIPanel : public
System::Windows::Forms::Panel
{
public:
virtual System::Void nextState(void);
virtual System::Void previousState(void);
virtual System::Int64 getState(void);
public:
HMIPanel(void);
};
}

-------------
HMIPanel.cpp
-------------
#include "stdafx.h"
#include "HMIPanel.h"

namespace HMI {
{
using namespace System;
HMIPanel::HMIPanel(void) {this->Name =3D "myPanel";}
System::Void HMIPanel::nextState(void) {}
System::Void HMIPanel::previousState(void) {}
System::Int64 HMIPanel::getState(void) { return 0; }
}
}
J'ai ensuite d=E9fini 2 classes h=E9ritant de HMIPanel, Menu et List qui
sont tout =E0 fait diff=E9rentes dans leurs affichages. Je ne donnerai
que le .h, le .cpp ne me semble pas utile.

Code :
-------
Menu.h
-------
#include "HMIPanel.h"

namespace HMI {[indent]
public ref class Menu : public HMI:HMIPanel
{
public :int sizeH;
int sizeV;
int state;
System::Windows::Forms::Label^ label1;
System::Windows::Forms::Label^ label1;
System::Windows::Forms::PictureBox^ pic1;
System::Windows::Forms::PictureBox^ pic2;
System::String^ title1;
System::String^ title2;
public :
virtual System::Void nextState(void);
virtual System::Void previousState(void);
virtual System::Int64 getState(void);
public :
Menu(System::String^ _label1,System::String^ _label2,System::String^
_pic1,System::String^ _pic2,System::String^ _title1,System::String^
_title2);};
}
-----
List.h
-----
#include "List.h"

namespace HMI {
public ref class List : public HMI::HMIPanel {
protected:
int sizeH;
int sizeV;
int state;
System::String^ title;
array<System::String^> choice;
public :virtual System::Void nextState(void);
virtual System::Void previousState(void);
virtual System::Int64 getState(void);
public :
List(System::String^ _title,array<System::String^> _choice);
};
}
J'espere que tout le monde a suivi jusque la .

dans mon Form.h, j ai un attribut de type HMIPanel tel que suit :

Code :
HMI::HMIPanel^ panel1;Lors de l'initialisation je fais comme suit :

Code :
HMI::Menu^ myMenu =3D gcnew HMI::Menu(...........);
this->panel1 =3D myMenu ;
Dans la suite du programme j'appelle la fonction nextState(), qui
incr=E9mente l'=E9tat de 1 et l'affiche =E0 l'=E9cran pour v=E9rifier que ca
marche bien cela donne :
Console::WriteLine(myMenu->getState) affiche "1"
Console::Writeline(this->panel1->getState) affiche "0"

De plus, lors du lancement du GUI, la fenetre s'affiche normalement
comme si c etait bien un Menu, par contre les m=E9thodes
nextState,previousState et getState sont celles de HMIPanel et non
celles de Menu. J'ai l'impression que mon attribut panel1, ne fait pas
l"overriding" des m=E9thodes...

En clair, ca appelle les fonction de HMIPanel.h et pas celle de Menu.h.
En parcourant le site developpez.com je suis tomb=E9 sur cet article :
http://c.developpez.com/faq/cpp/?page=3Dvirtual#DEFINITION_virtual

N=E9ammoins il semble que sous VS 2005, ces manipulations ne soient pas
possible, lorsque j'utilise * on me dit qu il faut utiliser le ^ , bref
je ne sais pas ce que je dois faire pour faire une bonne copie
polymorphique.

D=E9sol=E9 pour le message un peu long, merci d'avance =E0 ceux qui le
liront et pourront m'aider

2 réponses

Avatar
Fabien LE LEZ
On 8 Jun 2006 01:06:32 -0700, :

Subject: Polymorphisque avec les types managés


J'imagine que tu parles là de C++/CLI, qui me semble un langage assez
différent du C++. AMHA, tu trouveras plus facilement des spécialistes
de ce langage sur un forum microsoft.public.*, ou, à défaut, sur
fr.comp.os.ms-windows.programmation.

Avatar
Christophe.Azemar

On 8 Jun 2006 01:06:32 -0700, :

Subject: Polymorphisque avec les types managés


J'imagine que tu parles là de C++/CLI, qui me semble un langage assez
différent du C++. AMHA, tu trouveras plus facilement des spécialistes
de ce langage sur un forum microsoft.public.*, ou, à défaut, sur
fr.comp.os.ms-windows.programmation.


Oui C++/CLI, je vais aller sur ces groupes la alors merci.