Pb de programmation objet - C++ - Programmation
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.
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?
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 */
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.
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 !
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 ??
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
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?
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.
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
Marsh Posté le 02-05-2002 à 12:59:11
bah si tu n'a pas appellé methodeEssai sur form2, ça peut pas marcher.
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???
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.
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?
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
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 |
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...
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+
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!
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