Tableaux d'objets

  • Il est tout à fait possible de créer un tableau contenant des objets.

  • Lors de la création d'un tableau d'objets, le constructeur par défaut est appelé autant de fois qu'il y a d'éléments à créer dans le tableau

Attention : il n'est pas possible de faire appel à un constructeur avec paramètres pour initialiser les objets d'un tableau. Il faudra donc passer par une fonction membre (voir exemple ci-dessous)

ExempleUtilisation d'un tableau de Leds

Position temporelleDurée
1
#define PORT_LED 5
2
#define PORT_MAX 8
3
#define PORT_MIN 2
4
#define TEMPO 500
5
6
class Led{
7
  private:
8
  int pinLed;
9
  public:
10
  Led ();
11
  bool init(int); //permet d'initialiser l'objet, ici le numéro de port
12
  void setOn();//Allume la LED
13
  void setOff();//Eteindre la LED
14
  };
15
16
Led::Led(){}
17
bool Led::init(int value){
18
  bool error=LOW;
19
    if(value >= PORT_MIN && value <= PORT_MAX){
20
    	pinLed = value;
21
        pinMode(pinLed, OUTPUT);
22
  	}
23
  else{
24
    error=HIGH;
25
   }
26
  return(error);
27
  }
28
void Led::setOn(){
29
  digitalWrite(pinLed, HIGH);
30
  delay(TEMPO);
31
}
32
void Led::setOff(){
33
  digitalWrite(pinLed, LOW);
34
  delay(TEMPO);
35
}
36
37
38
39
/* Progamme principal */
40
Led tabLed[3]; //On définit un tableau d'objets de 3 LED
41
42
void setup(){
43
  Serial.begin(9600);
44
  //Initialisation des Leds
45
  for(short compteur=0;compteur<3;compteur++){
46
    tabLed[compteur].init(PORT_LED + compteur) //Il n'est pas possible d'avoir un constructeur avec paramètres, on utilise donc une fonction d'initialisation
47
    }
48
}
49
50
void loop(){
51
  for(short compteur=0;compteur<3;compteur++){
52
    tabLed[compteur].setOn();//Appel d'une fonction membre d'un objet du tableau
53
    }
54
    for(short compteur=0;compteur<3;compteur++){
55
    tabLed[compteur].setOff();
56
    }
57
58
  }
59
 

MéthodePour résumer

On commence par créer le tableau d'objet :

1
Led tabLed[3];

Il faudra ensuite prévoir l'initialisation des objets, la plupart du temps grâce à une boucle :

1
for(short compteur=0;compteur<3;compteur++){
2
    tabLed[compteur].init(PORT_LED + compteur) //Il n'est pas possible d'avoir un constructeur avec paramètres, on utilise donc une fonction d'initialisation
3
    }

On peut ensuite utiliser les fonctions membres, soit de manière ponctuelle comme ceci :

1
tabLed[1].setOn();//Allume la deuxième LED (la numérotation des tableaux commence à zéro)

On peut également utiliser des boucles :

1
for(short compteur=0;compteur<3;compteur++){
2
    tabLed[compteur].setOn();//Appel d'une fonction membre d'un objet du tableau
3
    }