Impostazione della dimensione di un array durante la creazione di un oggetto.
È necessario ricordare che la dimensione di un array deve essere nota prima dell'avvio del programma. Ma cosa succede se abbiamo bisogno di un array nella classe con la possibilità di impostarne le dimensioni? Se c'è un solo oggetto nel programma o se la dimensione dell'array è la stessa per tutti gli oggetti, quindi ovviamente puoi farlo in questo modo:
#define ARRAY_LENGTH 20
class myClass
{
public:
byte values[ARRAY_LENGTH];
private:
};
myClass object1; // qui object1.values avrà 20 celle
myClass object2; // qui object2.values avrà 20 celle
myClass object3; // qui object3.values avrà 20 celle
Se vogliamo essere in grado di impostare la dimensione dell'array per ogni oggetto, allora ci sono delle opzioni: Durante la creazione degli oggetti, apparirà il <parametro> corrispondente.
template < int ARRAY_LENGTH>
class myClass
{
public:
byte values[ARRAY_LENGTH];
private:
};
myClass<10> object1; // qui object1.values avrà 10 celle
myClass<20> object2; // qui object2.values avrà 20 celle
myClass<30> object3; // qui object3.values avrà 30 celle
Puoi anche scrivere la dimensione dell'array su una variabile da utilizzare in ulteriore codice:
template < int ARRAY_LENGTH>
class myClass
{
public:
byte values[ARRAY_LENGTH];
byte arrSize = ARRAY_LENGTH;
private:
};
myClass<30> object1;
// object1.values avrà 30 celle
// object1.arraySize ha il valore 30
Quando si crea un oggetto a livello globale, un tale array verrà archiviato nell'area delle variabili globali, il compilatore sarà in grado di calcolarne le dimensioni.
È possibile allocare un "array" in modo dinamico e memorizzarlo come puntatore. Il valore "costante" è una funzionalità C++ chiamata lista di inizializzazione (due punti dopo myClass(int x) ):
class myClass
{
public: int* array;
myClass(int x) : array(new int[x])
{
// costruttore
}
private:
};
myClass object(5);
void setup()
{
Serial.begin(9600);
object.array[0] = 1;
object.array[1] = 2;
object.array[2] = 3;
object.array[3] = 4;
object.array[4] = 5;
for (byte i = 0; i < 5; i++)
{
Serial.println(obj.arr[i]); //produrrà 1 2 3 4 5 con un avvolgimento
}
}
void loop()
{
}
Anche quando si crea un oggetto a livello globale, tale array
verrà archiviata nella memoria dinamica e il compilatore non sarà in grado di calcolarne la dimensione.