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.      
Crea il tuo sito web gratis! Questo sito è stato creato con Webnode. Crea il tuo sito gratuito oggi stesso! Inizia