Pb de programmation objet

Pb de programmation objet - C++ - Programmation

Marsh Posté le 30-04-2002 à 09:58:39    

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:

Reply

Marsh Posté le 30-04-2002 à 09:58:39   

Reply

Marsh Posté le 30-04-2002 à 10:50:28    

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
Reply

Marsh Posté le 30-04-2002 à 11:25:54    

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?

Reply

Marsh Posté le 30-04-2002 à 11:54:02    

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
Reply

Marsh Posté le 30-04-2002 à 15:12:17    

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

Reply

Marsh Posté le 30-04-2002 à 15:14:04    

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 !  ;)

Reply

Marsh Posté le 30-04-2002 à 15:26:00    

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
Reply

Marsh Posté le 30-04-2002 à 15:43:55    

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

Reply

Marsh Posté le 30-04-2002 à 15:56:00    

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?

Reply

Marsh Posté le 30-04-2002 à 17:07:06    

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
Reply

Marsh Posté le 30-04-2002 à 17:07:06   

Reply

Marsh Posté le 02-05-2002 à 11:12:14    

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  ;)

Reply

Marsh Posté le 02-05-2002 à 12:50:58    

Please... help me..

Reply

Marsh Posté le 02-05-2002 à 12:59:11    

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

Reply

Marsh Posté le 02-05-2002 à 18:08:40    

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???

Reply

Marsh Posté le 02-05-2002 à 18:26:43    

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.

Reply

Marsh Posté le 03-05-2002 à 09:17:58    

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?

Reply

Marsh Posté le 03-05-2002 à 10:47:56    

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:

Reply

Marsh Posté le 03-05-2002 à 12:31:44    

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...

Reply

Marsh Posté le 03-05-2002 à 15:50:42    

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:

Reply

Marsh Posté le 03-05-2002 à 20:17:58    

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!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed