Bonjour,
Je suis en train de jouer avec une classe définissant des boutons radio. Tous les boutons ont en commun une propriété variable indiquant quel est le bouton actif. Cette propriété est donc définie static. Jusque la pas de problèmes, cela fonctionne à merveille.
Maintenant, je voudrai définir une deuxième série de boutons, qui ne doivent pas partager la même propriété. J'ai donc pour ne pas avoir à réécrire tout le code, dérivé une nouvelle classe. Mon problème est que cette nouvelle classe accède non pas à sa propre propriété, mais à la propriété de la classe mère.
Voici mon code de test pour cette fonctionnalité:
class Mere
{
public:
static uint8_t variable; // Unique partagée entre toutes les instances
virtual void affecte(uint8_t donnee); // Minimalisé ici, sinon grosse méthode
};
static uint8_t Mere::variable;
void Mere::affecte(uint8_t donnee) { variable=donnee; }
class Fille: public Mere
{
public:
static uint8_t variable; // Une variable pour Mere, une pour Fille
};
static uint8_t Fille::variable;
void setup()
{
Mere mere;
Fille fille;
Serial.begin(9600);
mere.affecte(10);
Serial.println("Mere: "+String(Mere::variable)+" Fille: "+String(Fille::variable)); // Mere: 10 Fille: 0
// Comportement voulu, mere utilise sa variable de classe
fille.affecte(12);
Serial.println("Mere: "+String(Mere::variable)+" Fille: "+String(Fille::variable)); // Mere: 12 Fille: 0
// Manque de pot, la méthode est chez Mere et elle travaille avec la variable de classe de Mere
}
void loop()
{
}
Ce que je cherche, c'est que fille.affecte(12); utilise Fille::variable;. Mais comme j'hérite de Mere::affecte();, cette méthode appelle Mere::variable;. Le lien vers cette propriété est défini à la compilation.
Dans mon programme, Mere hérite de tant de choses que seul variable est rajoutée et affecte() redéfinie. Si je dois redéfinir Fille::affecte(); cela est équivalent à couper coller Mere et à changer les Mere en MereBis (Mere2, c'est mon code... pardon pour la grossièreté).
Y a-t-il moyen que affecte() accède à la bonne classe sans la redéfinir?
Merci