Membri di classe statici.
Una caratteristica molto interessante sono i membri statici della classe - variabili e oggetti. Se rendi un membro di una classe statico, quindi esisterà solo in un'istanza per tutti gli oggetti della classe.
- Variabile - diventerà globale per tutti gli oggetti creati. Inoltre, è possibile accedere a questa variabile direttamente per conto della classe, senza la partecipazione di oggetti. Una variabile di classe statica deve essere dichiarata separatamente dalla classe (ovvero creata come oggetto).
- Funzione (metodo) - puoi accedervi direttamente per conto della classe, senza la partecipazione di oggetti. Importante, un metodo statico può cambiare solo variabili statiche, perché non è legato a un oggetto, cioè non sa con quale variabile oggetto interagire.
Un esempio che mostra tutto quanto sopra:
class myClass
{
public:
void setVal(byte val)
{
static_val = val;
}
byte getVal()
{
return static_val;
}
static byte getValStatic()
{
return static_val;
}
static byte static_val;
};
// assicurati di creare una variabile di classe statica separata
byte myClass::static_val;
// crea due oggetti
myClass myObjects1, myObjects2;
void setup()
{
Serial.begin(9600);
// possiamo lavorare con un membro statico senza essere vincolati a un oggetto,
// indicare l'appartenenza alla classe con ::
myClass::static_val = 10;
// stampa 10 in tutti i casi tramite il metodo del primo oggetto
Serial.println(myObjects1.getVal());
// tramite il metodo del secondo oggetto
Serial.println(myObjects2.getVal());
// tramite un metodo statico senza vincolarsi a un oggetto
// indica l'appartenenza alla classe tramite ::
Serial.println(myClass::getValStatic());
// cambia static_val attraverso un metodo di qualsiasi oggetto
myObjects2.setVal(50);
// stampa 50 in tutti i casi
Serial.println(myObjects1.getVal());
Serial.println(myObjects2.getVal());
Serial.println(myClass::getValStatic());
}
void loop()
{
}