In pratica anche quando si richiama un costruttore e un distruttore va specificata ugualmente la classe.
Grazie mille (aveva fatto lo stesso errore il libro). Comunque funziona tutto adesso.
Riguardo il distruttore, ho letto che posso invocarlo anche io(tramite la chiamata dal main):
codice:
conv.~Conversione();
Altrimenti si invoca da solo, al termine della parte di codice...
La mia domanda è ... perchè se lo invoco dal main, aggiungendo:
codice:
conv.~Conversione();
Fa uscire due volte la scritta (cout<<):
codice:
Fine della conversione
Cioè, è come se lo avesse già deallocato dalla memoria, e quello che mi fa vedere è solo l'operazione di output della scritta? oppure accade altro di strano?
La modifica sarebbe questa nel main:
codice:
#include <stdlib.h>
#include <iostream>
using namespace std;
#include "Conversione.h"
int main( )
{
Conversione conv;
conv.ottieni_valore( );
conv.valore_euro = conv.converti_lira_in_euro( );
cout << conv.valore_lira <<" in lire, vale " << conv.valore_euro << " Euro."<<endl;
conv.~Conversione(); //aggiunto questo per prova
return(0);
}
Conversione.h funzionante (senza modifiche)
codice:
class Conversione
{
public:
Conversione();
~Conversione();
long valore_lira;
float valore_euro;
void ottieni_valore();
float converti_lira_in_euro( );
};
Conversione.cpp funzionante (senza modifiche)
codice:
#include <iostream>
using namespace std;
#include "Conversione.h"
Conversione::Conversione( )
{
cout << "Inizio della conversione";
valore_lira = 0;
// Inizializzazione della variabile valore_lira
valore_euro = 0.0;
// Inizializzazione della variabile valore_euro
};
Conversione::~Conversione( )
{
cout << "Fine della conversione";
};
void Conversione::ottieni_valore( )
{
cout << "Inserire il valore in lire: " ;
cin >> valore_lira;
cout << endl;
};
float Conversione:: converti_lira_in_euro( )
{
float risultato;
risultato = ((float) valore_lira) / (float) 1936.27;
return risultato;
};
Giusto per chiarire l'ultima cosa, dato che sul libro non l'ho trovata scritta(se si chiama anche dal main cosa succede?).
Cioè , ho letto che: o la chiami tu, o fa da solo l'operazione (di deallocazione di memoria).
Però perchè se la chiamo io, fa anche l'operazione automatica (la ripete 2 volte)?