Variabili statiche e templates

di il
2 risposte

Variabili statiche e templates

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.

2 Risposte

  • Re: Variabili statiche e templates

    mauronew ha scritto:


    1) se istanzio un oggetto con 2 parametri float o string, l'oggetto viene creato ma non si incrementa la variabile statica
    Perché è un template, quindi avrai una classe per ogni tipo e, di conseguenza, variabili statiche diverse
    
      Razionale<int> r1 (5, 3);
      Razionale<int> r2 (8, 2);
      Razionale<int> r3 (4);
      cout << "cont<int> = " << r1.cont << endl; 
      Razionale<float> r4 (4.3, 6.12);     
      Razionale<float> r5 (24.3, 16.12);
      cout << "cont<float> = " << r4.cont << endl;   
      Razionale<string> r6 ("ciao", "arrivederci");
      cout << "cont<string> = " << r6.cont << endl;
    
    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"
    Stesso motivo
    
      cout << "cont  = " << Razionale<int>::cont << endl; 
      cout << "cont  = " << Razionale<float>::cont << endl; 
      cout << "cont  = " << Razionale<string>::cont << endl; 
    
  • Re: Variabili statiche e templates

    Grazie Weierstrass, adesso è tutto molto più chiaro
Devi accedere o registrarti per scrivere nel forum
2 risposte