Modifica di una variabile da una classe.
Considera questa situazione: abbiamo bisogno di cambiare il valore di una variabile in uno schizzo usando un metodo/funzione di libreria. Ci sono due opzioni: assegnare direttamente o utilizzare un puntatore. Considera entrambe le opzioni in un esempio:
File <ChangeValue.h>
#pragma once
#include <Arduino.h>
class MultiplyTo
{
public:
int multiplyTo1(int value);
void multiplyTo2(int* value);
private:
};
File <ChangeValue.cpp>
#include <ChangeValue.h> // includere l'intestazione
int MultiplyTo::multiplyTo1(int value)
{
// restituisce il valore moltiplicato per 5
return value * 5;
}
void MultiplyTo::multiplyTo2(int* value)
{
// moltiplicare variabile per 7
*value = *value * 7;
}
File <ChangeValue.ino>
#include <ChangeValue.h>
MultiplyTo multiplyObject;
void setup()
{
Serial.begin(9600);
int a = 10;
a = multiplyObject.multiplyTo1(a); // a = 50
Serial.println(a);
multiplyObject.multiplyTo2(&a); // a = 350
Serial.println(a);
}
void loop()
{
}
File keywords.txt
##################################
#Syntax ChangeValue
##################################
#Class (KEYWORD1)
##################################
ChangeValue KEYWORD1
MultiplyTo KEYWORD1
##################################
#Methods and Functions (KEYWORD2)
##################################
multiplyTo1 KEYWORD2
multiplyTo2 KEYWORD2
Nella prima opzione, passiamo il valore della variabile, all'interno del metodo lo moltiplichiamo per 5 e lo restituiamo indietro, e possiamo uguagliare la stessa variabile nello schizzo con il nuovo valore. Nel caso di un puntatore, tutto funziona in modo più interessante: passiamo l'indirizzo di una variabile al metodo, moltiplichiamo questa variabile per 7 all'interno della classe, e il gioco è fatto. In parole povere, in questo esempio: cosa faremo con *value all'interno del metodo - questo si rifletterà immediatamente nella variabile a. Questo argomento può essere sviluppato con questa opzione: possiamo memorizzare l'indirizzo di una variabile nella classe e la classe avrà sempre accesso diretto al valore della variabile, non sarà necessario passarla ogni volta.
File <StoreAddress.h>
#pragma once
#include <Arduino.h>
class MultiplyTo
{
public:
void fullControl(int* value);
void multiplyTo();
private:
int *_value; // memorizzare l'indirizzo
};
File <StoreAddress.cpp>
#include <StoreAddress.h> // includere l'intestazione
void MultiplyTo::fullControl(int* value)
{
_value = value;
}
void MultiplyTo::multiplyTo()
{
*_value = *_value * 5;
}
File <StoreAddress.ino>
#include <StoreAddress.h>
MultiplyTo multiplyObject;
int a = 10;
void setup()
{
Serial.begin(9600);
// passato l'indirizzo della variabile a
multiplyObject.fullControl(&a);
Serial.println(a); // adesso variabile a = 10
multiplyObject.multiplyTo(); // qui la variabile a diventa = 50
Serial.println(a);
a = 5;
multiplyObject.multiplyTo(); // qui la variabile a diventa = 25
Serial.println(a);
multiplyObject.multiplyTo(); // qui la variabile a diventa =
125
Serial.println(a);
}
void loop()
{
}
File keywords.txt
##################################
#Syntax StoreAddress
##################################
#Class (KEYWORD1)
##################################
StoreAddress KEYWORD1
MultiplyTo KEYWORD1
##################################
#Methods and Functions (KEYWORD2)
##################################
fullControl KEYWORD2
multiplyTo KEYWORD2
In questo modo la classe ei suoi metodi possono avere il pieno controllo sulla variabile nel programma principale.