LOCODUINO
Parlons Arduino => Débuter => Discussion démarrée par: savignyexpress le février 25, 2019, 07:48:35 am
-
Bonjour à tous,
J'ai une classe GareCachee dans laquelle je souhaite inclure plusieurs instances d'une classe Zone afin de détecter les trains. Le constructeur de la classe Zone reçoit la pin d'entrée reliée à la zone de détection.
Ayant encore peu d'expérience avec les constructeurs C++, je me demande quelle est la meilleure manière de créer une telle structure.
Objets de classe Zone
class GareCachee
{
...
private:
Zone zoneG;
Zone zoneD;
};
Avec cette variante, comment appeler le constructeur Zone en lui passant une pin différente pour zoneG et zoneD ?
Références vers classe Zone
class GareCachee
{
public:
GareCachee (Zone &xZoneG, Zone &xZoneD) : zoneG (xZoneG), zoneD (xZoneD) {}
private:
Zone &zoneG;
Zone &zoneD;
};
...
Zone zG (14);
Zone zD (15);
GareCachee gareCachee (zG, zD);
Cette approche fonctionne bien, mais on doit connaître les objets inclus avant l'appel du constructeur GareCachee.
Pointeurs de classe Zone
class GareCachee
{
public:
GareCachee ()
{
pZoneG = new Zone (14);
pZoneD = new Zone (15);
}
private:
Zone *pZoneG;
Zone *pZoneD;
};
Ici on alloue dynamiquement les objets inclus. Une variante aurait été de les instancier hors de la classe et les passer en paramètre à une méthode différente du constructeur qui mettrait à jour pZoneG et pZoneD.
Quelle approche préconisez-vous ?
Un tout grand merci d'avance pour vos suggestions.
Bon début de semaine et meilleures salutations.
Marc-Henri
-
Bonjour Marc-Henri
Pour construire des objets membres (B et C) d'un autre (A), tu dois appeler les constructeurs de B et C à partir du constructeur de A :
class GareCachee
{
private:
Zone zoneG;
Zone zoneD;
public:
GareCachee(const uint8_t pinG, const uint8_t pinD) : zoneG(pinG), zoneD(pinD) {}
};
-
Bonjour Jean-Luc,
Merci beaucoup pour ta réponse rapide. J'ignorais que les listes d'initialisation pouvaient aussi contenir des appels de constructeurs en plus des valeurs destinées à initialiser les membres non objets.
Bon début de semaine et meilleures salutations.
Marc-Henri