Go Down

Topic: Utiliser une classe depuis une variable (Read 1 time) previous topic - next topic

vincnet68

Bonjour,

C'est un peu compliqué j'essairai donc d'expliquer au mieux.

J'ai une classe fait maison.

Je crée plusieurs instance de ma classe (Instance1, Instance2, ...).

J'ai une fonction qui me renvoi une des instance :
Code: [Select]
MaClasse getMaClasse(int index)
{
if (index ==10) return Instance1;
else return Instance2;
}


Jusquelà pas de soucis.

Mais lorsque j'utilise la fonction "getMaClasse" pour interagir avec mon instance, celle-ci ne réagit pas correctement.

Code: [Select]
MaClasse item = getMaClasse(10);
item.SetFonction(1);


Je me casse la tête depuis quelque jour sur ce sujet mais je ne trouve pas de solution.  :smiley-eek:

Merci de votre aide

Vincnet68

nicolasc_eu

#1
Aug 07, 2014, 09:01 pm Last Edit: Aug 07, 2014, 09:03 pm by nicolasc_eu Reason: 1
Salut,

Je pense qu'il te manque quelques petites notions en POO. Une classe en C++ se créée de la sorte :

MaClasse.h

Code: [Select]

class MaClasse {
   public:
       int getFoo();
}


MaClasse.cpp

Code: [Select]

#include "MaClasse.h"

int MaClasse::getFoo(){
   ...
   return ...;
}



Ainsi, une instance se crée :

main.cpp

Code: [Select]

#include "MaClasse.h"

MaClasse* monInstance = new MaClasse();
monInstance->getFoo();






Ce que tu cherches à faire s'apparenterait presque à un pattern Factory, et à mon avis tu t'égares :)


À plus,

--
N.

vincnet68

Salut,

Pour le POO je maitrise plutot le C# (en amateur), mais je suis très mauvais en C++ (très très mauvais)
Et oui c'est bien du POO que je souhaite faire.

Donc si je comprend bien lors de la création de mon instance il faut que je mettre un * devant le nom du type (quelle est la fonction du * )?
Et au lieu d'utiliser un . j'utilise un -> (comme en php).

C'est cela ?

Merci

Vincnet68

XavierMiller

Le fait de retourner un MaClasse va te fournir une copie de taclasse, déconnectée de l'originale.
Comme dit dans le message précédent, tu dois fournir un pointeur ou une référence pour travailler sur la "MaClasse" même.

vincnet68

Désolé de faire mon bête  mais comment je retourne un pointeur ou une référence dans mon cas :

Code: [Select]
MaClasse getMaClasse(int index)
{
if (index ==10) return Instance1;
else return Instance2;
}


et

Code: [Select]
MaClasse item = getMaClasse(10);
item.SetFonction(1);

nicolasc_eu

MaClasse* instance; => On crée un pointeur de type MaClasse.

*instance; => On accède à la valeur (opérateur d'indirection)



Pour simplifier en se basant sur des types primitifs :

Code: [Select]

int* variable; // créé un pointeur vers entier
*variable = 5 // assigne une valeur à variable

// Là où :
variable; // => correspond à son adresse en mémoire
*variable; // => donne 5



Mais là on s'éloigne de la question de départ. Que souhaites-tu faire ? Peux-tu nous en montrer plus ?

À plus,

--
N.

vincnet68


Voici les extraits de mon code :

Code: [Select]
  boolean fonction_Move(String datasString)
   {
     boolean result = false;
      String indexStr;
           indexStr = getValueKeyPair(datasString, "idx"); //get the index number
           int index = atoi(indexStr.c_str());
           if (index >0 && index <3) //index valid
           {
             String value = getValueKeyPair(datasString, "value"); // get the value

            VoletV7 selectedVolet = GetVoletFromIndex(index);

             if (value == "up")
             {
               selectedVolet.SetFonction(101);
               result = true;
               Serial.print("move : ");   Serial.print(index); Serial.println(" to : UP");
             }
             else if (value == "down")
             {
                selectedVolet.SetFonction (201);
                 result = true;
                 Serial.print("move : ");   Serial.print(index); Serial.println(" to : DOWN");
             }       
               
           }
         return result;
   }

VoletV7 GetVoletFromIndex(int index)
{
switch (index)
{
case 1:
return cuisinePorte;
break;
case 2:
return cuisineFenetre;
break;
case 3:
return SaM;
break;
      }

}


C'est à : selectedVolet.SetFonction() que cela ne fonctionne pas.

Merci de ton aide.

Vincnet68

nicolasc_eu

Peux-tu joindre ta classe VoletV7 et le reste de ton code stp ?

Go Up