Costruttore e distruttore di classi C ++
Il costruttore di classi
Una classe constructor è una funzione membro speciale di una classe che viene eseguita ogni volta che creiamo nuovi oggetti di quella classe.
Un costruttore avrà esattamente lo stesso nome della classe e non ha alcun tipo di ritorno, nemmeno void. I costruttori possono essere molto utili per impostare i valori iniziali per alcune variabili membro.
L'esempio seguente spiega il concetto di costruttore:
#include <iostream>
using namespace std;
class Line {
public:
void setLength( double len );
double getLength( void );
Line(); // This is the constructor
private:
double length;
};
// Member functions definitions including constructor
Line::Line(void) {
cout << "Object is being created" << endl;
}
void Line::setLength( double len ) {
length = len;
}
double Line::getLength( void ) {
return length;
}
// Main function for the program
int main() {
Line line;
// set line length
line.setLength(6.0);
cout << "Length of line : " << line.getLength() <<endl;
return 0;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Object is being created
Length of line : 6
Costruttore parametrizzato
Un costruttore predefinito non ha alcun parametro, ma se necessario, un costruttore può avere parametri. Questo ti aiuta ad assegnare il valore iniziale a un oggetto al momento della sua creazione come mostrato nel seguente esempio:
#include <iostream>
using namespace std;
class Line {
public:
void setLength( double len );
double getLength( void );
Line(double len); // This is the constructor
private:
double length;
};
// Member functions definitions including constructor
Line::Line( double len) {
cout << "Object is being created, length = " << len << endl;
length = len;
}
void Line::setLength( double len ) {
length = len;
}
double Line::getLength( void ) {
return length;
}
// Main function for the program
int main() {
Line line(10.0);
// get initially set length.
cout << "Length of line : " << line.getLength() <<endl;
// set line length again
line.setLength(6.0);
cout << "Length of line : " << line.getLength() <<endl;
return 0;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Object is being created, length = 10
Length of line : 10
Length of line : 6
Utilizzo degli elenchi di inizializzazione per inizializzare i campi
In caso di costruttore parametrizzato, è possibile utilizzare la seguente sintassi per inizializzare i campi:
Line::Line( double len): length(len) {
cout << "Object is being created, length = " << len << endl;
}
La sintassi sopra è uguale alla sintassi seguente:
Line::Line( double len) {
cout << "Object is being created, length = " << len << endl;
length = len;
}
Se per una classe C sono presenti più campi X, Y, Z, ecc. Da inizializzare, utilizzare può utilizzare la stessa sintassi e separare i campi con una virgola come segue:
C::C( double a, double b, double c): X(a), Y(b), Z(c) {
....
}
Il distruttore di classe
UN destructor è una funzione membro speciale di una classe che viene eseguita ogni volta che un oggetto della sua classe esce dall'ambito o ogni volta che l'espressione di eliminazione viene applicata a un puntatore all'oggetto di quella classe.
Un distruttore avrà esattamente lo stesso nome della classe preceduta da una tilde (~) e non può né restituire un valore né accettare alcun parametro. Destructor può essere molto utile per rilasciare risorse prima di uscire dal programma come chiudere file, rilasciare memorie ecc.
L'esempio seguente spiega il concetto di distruttore:
#include <iostream>
using namespace std;
class Line {
public:
void setLength( double len );
double getLength( void );
Line(); // This is the constructor declaration
~Line(); // This is the destructor: declaration
private:
double length;
};
// Member functions definitions including constructor
Line::Line(void) {
cout << "Object is being created" << endl;
}
Line::~Line(void) {
cout << "Object is being deleted" << endl;
}
void Line::setLength( double len ) {
length = len;
}
double Line::getLength( void ) {
return length;
}
// Main function for the program
int main() {
Line line;
// set line length
line.setLength(6.0);
cout << "Length of line : " << line.getLength() <<endl;
return 0;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Object is being created
Length of line : 6
Object is being deleted