Auteur Sujet: C++: objets membres d'une classe ?  (Lu 479 fois)

Marc-Henri

  • Full Member
  • ***
  • Messages: 132
    • Voir le profil
    • Modélisme ferroviaire & électronique
C++: objets membres d'une classe ?
« 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

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1440
    • Voir le profil
Re : C++: objets membres d'une classe ?
« Réponse #1 le: février 25, 2019, 09:53:44 am »
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) {}
};
Cordialement

Marc-Henri

  • Full Member
  • ***
  • Messages: 132
    • Voir le profil
    • Modélisme ferroviaire & électronique
Re : C++: objets membres d'une classe ?
« Réponse #2 le: février 25, 2019, 10:18:31 am »
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