Utiliser une classe depuis une variable

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 :

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.

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

Merci de votre aide

Vincnet68

Salut,

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

MaClasse.h

class MaClasse {
    public:
        int getFoo();
}

MaClasse.cpp

#include "MaClasse.h"

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

Ainsi, une instance se crée :

main.cpp

#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 :slight_smile:

À plus,

--
N.

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

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.

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

MaClasse getMaClasse(int index)
{
if (index ==10) return Instance1;
else return Instance2;
}

et

MaClasse item = getMaClasse(10);
item.SetFonction(1);

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 :

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.

Voici les extraits de mon code :

  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

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