Ciao a tutti/e,
sto imparando ad usare i templates è ho un paio di problemi con le variabili statiche.
Il programma che sto facendo è questo:
#include <iostream>
using namespace std;
//------ class Razionale
template <typename T>
class Razionale {
T num, den;
public:
// C++17 --> nuovo modo di definire una variabile statica
inline static int cont = 0;
// costruttori
Razionale (T n, T d) : num {n}, den {d} { cont++; }
Razionale (T n) : Razionale (n, 1) {}
// getter e setter
T getNum () const { return num; }
T getDen () const { return den; }
void setNum (T n);
void setDen (T d);
};
template <typename T>
void Razionale<T>::setNum (T n) { num = n; }
template <typename T>
void Razionale<T>::setDen (T d) { den = d; }
//------ main
int main() {
Razionale r1 (5, 3);
cout << "r1 = " << r1.getNum() << " / " << r1.getDen() << endl;
Razionale<int> r2 (8, 2);
cout << "r2 = " << r2.getNum() << " / " << r2.getDen() << endl;
Razionale r3 (4);
cout << "r3 = " << r3.getNum() << " / " << r3.getDen() << endl;
cout << "cont = " << r3.cont << endl;
// PROBLEMA1
Razionale<float> r4 (4.3, 6.12);
cout << "r4 = " << r4.getNum() << " / " << r4.getDen() << endl;
Razionale<string> r5 ("ciao", "arrivederci");
cout << "r5 = " << r5.getNum() << " / " << r5.getDen() << endl;
// PROBLEMA2
//cout << "cont = " << Razionale.cont << endl;
cout << "cont = " << r3.cont << endl;
}
Questo è l'output:
r1 = 5 / 3
r2 = 8 / 2
r3 = 4 / 1
cont = 3
r4 = 4.3 / 6.12
r5 = ciao / arrivederci
cont = 3
Ho 2 problemi che non riesco a capire e risolvere:
1) se istanzio un oggetto con 2 parametri float o string, l'oggetto viene creato ma non si incrementa la variabile statica
2) non riesco ad accedere alla variabile statica nella forma Nome_classe.nome_variabile_statica...se ci provo mi segnala l'errore "cannot refer to class template 'Razionale' without a template argument list"
Grazie in anticipo per l'aiuto.