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

  FORUM HardWare.fr
  Programmation
  C++

  Pb de programmation objet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb de programmation objet

n°132557
AliG
Posté le 30-04-2002 à 09:58:39  profilanswer
 

J'ai un petit problème avec la programmation objet:
je travaille avec Visual C++ , j'ai une classe qui correspond a une "form", j'ai une deuxieme classe qui correspond a une 2eme form.  Le probleme est que je veux utiliser dans ma 2eme form des proprietes de la premiere form et donc recuperer dans la deuxieme form des valeurs qu'on a entré dans la 1ere.  
Par contre, je ne veux pas creer d'instance de la classe  qui correspond a la 1ere form dans la deuxieme.
Je ne sais pas si je suis assez claire... le pb est de pouvoir utiliser dans une classe des valeurs qu'on avait recuperé dans les proprietes d'une autre class (sans en creer une instance.).
 
 
Merci pour votre aide :hello:

mood
Publicité
Posté le 30-04-2002 à 09:58:39  profilanswer
 

n°132590
instantdha​rma
Ailleurs c'est ici
Posté le 30-04-2002 à 10:50:28  profilanswer
 

réponse simple mais j'ai peut-être mal compris : si ta 2e form est un descendant de la 1e form, & que les propriétés de la 1e form sont publiques ou protégées, ou privées avec des méthodes d'accès protégées et publiques, il te suffit de créer une instance de la 2e form pour avoir accès aux propriétés de la 1e form qui auront été héritées.


---------------
di. / www.diredaredare.org - Ailes de la ville
n°132606
AliG
Posté le 30-04-2002 à 11:25:54  profilanswer
 

Je vois ce que tu veux dire, mais dans ce cas la, je n'aurais pas les valeurs de ces proprietes telles qu'elles sont dans la 1ere form, non?

n°132625
instantdha​rma
Ailleurs c'est ici
Posté le 30-04-2002 à 11:54:02  profilanswer
 

si, sauf si tu les modifies.
ex :
form1
  propriété integer taille  
  propriété integer zozo = 3
methodes : setTaille(integer : taille) et integer getTaille()
et integer getZozo()
 
form2 hérite de form1
 
instancier form2
form2.setTaille(12) et voilà
integer zuzu
zuzu = 2 * form2.getZozo() /* zuzu vaut 6 */


---------------
di. / www.diredaredare.org - Ailes de la ville
n°132731
AliG
Posté le 30-04-2002 à 15:12:17  profilanswer
 

OK, c'est ce que je voulais, merci beaucoup!
Je vais le tester , si ca marche c'est genial.

n°132733
AliG
Posté le 30-04-2002 à 15:14:04  profilanswer
 

Sinon, autre petite question tant que je suis la, c'est quoi exactement une classe amie, ca sert a quoi? je trouve pas trop d'explication la dessus sur le net,
Merci !  ;)

n°132739
instantdha​rma
Ailleurs c'est ici
Posté le 30-04-2002 à 15:26:00  profilanswer
 

aucune idée, je sais pas d'ou vient ce terme? que signifie-t-il ? peut-être une classe liée ou dépendante d'une autre ??


---------------
di. / www.diredaredare.org - Ailes de la ville
n°132749
AliG
Posté le 30-04-2002 à 15:43:55  profilanswer
 

Je sais pas , j'avais vu ca en Java, ca ce definit avec un truc dans le genre "Friend Class etc..."  
 
Bon , c'est pas grave, merci quand meme

n°132763
AliG
Posté le 30-04-2002 à 15:56:00  profilanswer
 

instantdharma a écrit a écrit :

si, sauf si tu les modifies.
ex :
form1
  propriété integer taille  
  propriété integer zozo = 3
methodes : setTaille(integer : taille) et integer getTaille()
et integer getZozo()
 
form2 hérite de form1
 
instancier form2
form2.setTaille(12) et voilà
integer zuzu
zuzu = 2 * form2.getZozo() /* zuzu vaut 6 */  




 
J'ai voulu tester , mais le pb, c'est que ma form2 herite deja de la classe systeme "Form"... comment je peux faire?

n°132809
instantdha​rma
Ailleurs c'est ici
Posté le 30-04-2002 à 17:07:06  profilanswer
 

alors tu fais hériter form1 de form puis form2 de form1. Génial, mais pas facile de construire ses classes... si tu peux.


---------------
di. / www.diredaredare.org - Ailes de la ville
mood
Publicité
Posté le 30-04-2002 à 17:07:06  profilanswer
 

n°133304
AliG
Posté le 02-05-2002 à 11:12:14  profilanswer
 

et si j'ai:
 
form1
 propriété integer taille  
 propriété integer zozo = 3
methodes : setTaille(integer : taille) et integer getTaille()
et integer getZozo()
autre methode : private void methodeEssai (integer parametre)
                {   integer valeur=5;
                    this.zozo=valeur;
                }
 
form2 hérite de form1
 
instancier form2
form2.setTaille(12) et voilà
integer zuzu
zuzu = 2 * form2.getZozo() /* zuzu vaut 6 <-- il aurait fallu que zuzu vale 10 */
 
dans ce cas la, ca marche pas... j'aurais voulu recuperer la valeur que j'ai mit dans "valeur" dans la methode que j'ai rajouté...
Avez vous une solution pour resoudre mon probleme ?
Merci  ;)

n°133390
AliG
Posté le 02-05-2002 à 12:50:58  profilanswer
 

Please... help me..

n°133396
gfive
Posté le 02-05-2002 à 12:59:11  profilanswer
 

bah si tu n'a pas appellé methodeEssai sur form2, ça peut pas marcher.

n°133635
AliG
Posté le 02-05-2002 à 18:08:40  profilanswer
 

en fait mon "autre methode"  de la form1, c'est ca :
 
private void openFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
  {
   
   this.path=openFileDialog.FileName;
  }
 
Et ce que je veux recuperer, c'est path.
Je peux pas l'appeler cette methode dans ma form2. Ya aucun moyen de recuperer le contenu de la variable path dans la form2???

n°133659
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 02-05-2002 à 18:26:43  profilanswer
 

AliG a écrit a écrit :

Sinon, autre petite question tant que je suis la, c'est quoi exactement une classe amie, ca sert a quoi? je trouve pas trop d'explication la dessus sur le net,
Merci !  ;)  




 
Une classe amie permet à une classe d'utiliser toutes les méthodes et attributs déclarés comme private d'une autre classe , alors que normalement, seule cette classe y a accès.

n°133886
AliG
Posté le 03-05-2002 à 09:17:58  profilanswer
 

C'est pas possible de faire des variables globales que l'on peut utiliser d'une classe a l'autre et qui gardent leur valeur d'une classe a l'autre?

n°133947
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-05-2002 à 10:47:56  profilanswer
 

Oui, mais dans ce cas ce n'est plus de la programmation objet, et tes classes sont difficilement réutilisables.
 
Le concept de classe amie a justement été fait pour ne pas utiliser de variables globales.
 
Et de toute façon, que ce soit en prog objet ou procédurale :
 
variables globales :gun:

n°134010
AliG
Posté le 03-05-2002 à 12:31:44  profilanswer
 

Harkonnen a écrit a écrit :

Oui, mais dans ce cas ce n'est plus de la programmation objet, et tes classes sont difficilement réutilisables.
 
Le concept de classe amie a justement été fait pour ne pas utiliser de variables globales.
 
Et de toute façon, que ce soit en prog objet ou procédurale :
 
variables globales :gun:  




 
Mais tu fais comment toi alors quand tu as le probleme que j'ai...
Je veux utilisé dans une autre fenetre (donc classe) des valeurs que j'ai rentré dans des champs qui se trouvent dans ma 1ere fenetre (classe)...je sais vraiment pas comment faire...

n°134147
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 03-05-2002 à 15:50:42  profilanswer
 

Admettons que ta classe de fenêtre 1 s'appelle CFenetre1 et ta fenêtre 2 s'appelle CFenetre2
 
Tu as 2 champs dans CFenetre1, pour lesquels tu as créé 2 variables membres de type CString via le classwizard. Ces 2 variables membres se nomment respectivement m_champ1 et m_champ2
 
A partir de CFenetre1, tu ouvres CFenetre 2 de la manière suivante :
 
1 - Tu créé une instance de CFenetre2
 
CFenetre2 *dlg2;
 
2 - Tu affiches cette fenêtre, modalement ou non (modalement dans mon exemple) :
 
dlg2->DoModal();
 
donc dans ce cas, dlg2 est une instance fille de CFenetre1
 
Tout ce que tu as a faire dans ta classe CFenetre2 est de créer une variable membre qui récupérera un pointeur vers sa fenêtre parent (donc ta fenetre CFenetre1), puis d'utiliser ce pointeur pour accéder aux variables membres :
 
3 - Dans le fichier d'entête de CFenetre2, tu créé une variable private de type CFenetre1 :
 
private:
   CFenetre1 *m_parent;
 
4 - Dans le constructeur de CFenetre2, tu intialises cette variable :
 
m_parent = (CFenetre1 *)GetParent();
 
N'oublie pas d'inclure le header dans lequel CFenetre1 est défini.
 
Tu possèdes maintenant un pointeur vers ta fenêtre appelante. Pour accéder à ses champs, tu n'as plus qu'a lire les variables correspondantes :
 
CString txtChamp1 = m_parent->m_champ1
CString txtChamp2 = m_parent->m_champ2
 
Voila, et pas de classe amie et encore moins de variable globale.
 
En espérant avoir été suffisamment clair
 
A+  :hello:

n°134328
AliG
Posté le 03-05-2002 à 20:17:58  profilanswer
 

Ok, je vois ce que tu veux dire merci pour ton aide.
 
Mais en c# (je bosse en c#), il n'y a pas vraiment de pointeur alors j'ai finalement trouvé une methode plus simple. Je passe mes valeurs en parametre du constructeur de ma form2.
 
En tout cas, merci!


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

  Pb de programmation objet

 

Sujets relatifs
idée de programme en objet[CNMO] aide sur la programmation ISO
Objet OLE sous accesscherche qqu'un pour m'apprendre à faire de la programmation...
[JAVA] J'ai un FileNotFoundException avec l'objet URLConnectionSite sur la programmation (Tutoriaux DirectX et OpenGL + Jeux)
[C++] question bête sur la programmation et les pointeurs...[C] Programmation socket
Programmation PowWowPHP et programmation orientée objet : est-ce indispensable ?
Plus de sujets relatifs à : Pb de programmation objet


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